【问题标题】:How to use UITextView delegate when there are three UITextViews in Objective-cObjective-c中有三个UITextView时如何使用UITextView委托
【发布时间】:2016-06-22 05:38:59
【问题描述】:

创建 UITextViews

//Text View 1  
textview1.layer.borderWidth = 1.0f;
textview1.layer.borderColor = [[UIColor blackColor] CGColor];
textview1.delegate = self;

UIToolbar* doneToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
doneToolbar.barStyle = UIBarStyleBlackTranslucent;
doneToolbar.items = [NSArray arrayWithObjects:
    [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
    [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(donedescButtonClickedDismissKeyboard)],
    nil];
[doneToolbar sizeToFit];
textview1.inputAccessoryView = doneToolbar;

//Text View 2
textview2.layer.borderWidth = 1.0f;
textview2.layer.borderColor = [[UIColor blackColor] CGColor];
textview2.delegate = self;

UIToolbar* doneToolbarmeasure = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
doneToolbarmeasure.barStyle = UIBarStyleBlackTranslucent;
doneToolbarmeasure.items = [NSArray arrayWithObjects:
    [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
    [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(donemeasureButtonClickedDismissKeyboard)],
    nil];
[doneToolbarmeasure sizeToFit];
textview2.inputAccessoryView = doneToolbarmeasure;

//Text View 3
textview3.layer.borderWidth = 1.0f;
textview3.layer.borderColor = [[UIColor blackColor] CGColor];
textview3.delegate = self;

UIToolbar* doneToolbarreportdesc = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
doneToolbarreportdesc.barStyle = UIBarStyleBlackTranslucent;
doneToolbarreportdesc.items = [NSArray arrayWithObjects:
    [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
    [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(donereportdescButtonClickedDismissKeyboard)],
    nil];
[doneToolbarreportdesc sizeToFit];
textview3.inputAccessoryView = doneToolbarreportdesc;

委托和方法

-(void)donedescButtonClickedDismissKeyboard
{
    [textview1 resignFirstResponder]; 
}

-(void)donemeasureButtonClickedDismissKeyboard
{
    [textview2 resignFirstResponder];
}

-(void)donereportdescdamageButtonClickedDismissKeyboard
{
    [textview3 resignFirstResponder];
}

- (void)textViewDidBeginEditing:(UITextView *)textView
{
     textviewlbl1.hidden = YES;
     textviewlbl2.hidden = YES;
     textviewlbl3.hidden = YES;
}

- (void)textViewDidEndEditing:(UITextView *)textView
{
    if(textview1.text.length == 0)
    {
        textviewlbl1.hidden = NO;
    }

    if(textview2.text.length == 0)
    {
        textviewlbl2.hidden = NO;
    }

    if(textview3.text.length == 0)
    {
        textviewlbl3.hidden = NO;
    }
}

问题

当我单击 UITextView 时,所有三个标签都被隐藏,第二次单击时,所有三个标签都未隐藏。 我需要将它们分别隐藏和取消隐藏。请帮忙!!

【问题讨论】:

    标签: ios objective-c textview xib


    【解决方案1】:

    您可以对所有三个 textview 使用相同的委托方法,例如

    -(void)textViewDidBeginEditing:(UITextView *)textView {
      if (textView == textview1) {
        // Code for textview1
      }
      else if (textView == textview2) {
        // Code for textview2
      }
      else if (textView == textview3) {
        // Code for textview3
      }
    }
    

    所以你的方法会是这样的:

    - (void)textViewDidEndEditing:(UITextView *)textView
    {
        if(textView == textview1 && textview1.text.length == 0)
        {
            textviewlbl1.hidden=NO;
        }
        if(textView == textview2  && textview2.text.length == 0)
        {
            textviewlbl2.hidden=NO;
        }
        if(textView == textview3  && textview3.text.length == 0)
        {
            textviewlbl3.hidden=NO;
        }
    }
    

    这样你就可以访问 textview 的所有委托方法了。只需按其对象区分 textview 即可。其他一些委托方法是:

    - (void)textViewDidChange:(UITextView *)textView;
    - (void)textViewDidChangeSelection:(UITextView *)textView;
    - (void)textViewDidEndEditing:(UITextView *)textView;
    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
    - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange;
    - (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)range;
    

    【讨论】:

    • 完善您的代码工作.. 非常感谢@Pushkraj
    【解决方案2】:

    试试下面的代码

    - (void)textViewDidEndEditing:(UITextView *)textView
     {
        if(textView.text.length == 0)
        {
           textView.hidden=NO;
        }
    }
    

    【讨论】:

    • 如果您的 textview 长度为零,那么您是否要隐藏它?
    • 当它的长度 == 0 时。我想显示标签。我不隐藏文本视图。
    • 你的 textViewDidEndEditing 被调用了?如果是,请检查条件是否匹配?
    【解决方案3】:

    委托对象是每个委托调用的参数,在您的情况下为textView

    - (void)textViewDidEndEditing:(UITextView *)textView { if (textView == textview1) { // work with textview1 here } else if (textView == textview2) { // work with textview2 here } }

    【讨论】:

      【解决方案4】:

      像这样使用if-condition

      - (void)textViewDidBeginEditing:(UITextView *)textView
      {
            if (textView == textView1) {
             }
           if (textView == textView2) {
      
             }
             // and so on
      }
      

      【讨论】:

        【解决方案5】:

        您可以通过将tag 设置为UITextView 来做到这一点

        在您的viewDidLoad 方法集标记中:

        textview1.tag=1;
        textview2.tag=2;
        textview3.tag=3;
        

        现在您可以通过if-else 条件隐藏和显示占位符标签

        - (void)textViewDidBeginEditing:(UITextView *)textView
        {
            if (textView.tag==1)
            {
                textviewlbl1.hidden=YES;
            }
            else if (textView.tag==2)
            {
                textviewlbl2.hidden=YES;
            }
            else if (textView.tag==3)
            {
                textviewlbl3.hidden=YES;
            }
        }
        - (void)textViewDidEndEditing:(UITextView *)textView
        {
            if (textView.tag==1)
            {
                if(textview1.text.length == 0)
                {
                    textviewlbl1.hidden=NO;
                }
            }
            else if (textView.tag==2)
            {
                if(textview2.text.length == 0)
                {
                    textviewlbl2.hidden=NO;
                }
            }
            else if (textView.tag==3)
            {
                if(textview3.text.length == 0)
                {
                    textviewlbl3.hidden=NO;
                }
            }
        }
        

        【讨论】:

          【解决方案6】:
          textview1.tag=1;
          textview2.tag=2;
          textview3.tag=3;
          

          给这三个textview一个标签,标识不同的textview。

          【讨论】:

          • 所以代表的事件喜欢下面- (void)textViewDidEndEditing:(UITextView *)textView { if(textView.tag == 1) { } if(textView.tag == 2) {} if(textView.tag == 3) }
          猜你喜欢
          • 1970-01-01
          • 2012-04-01
          • 1970-01-01
          • 2017-05-28
          • 1970-01-01
          • 2019-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多