委托Xcode中的问题

时间:2012-12-18 04:52:21

标签: objective-c xcode

.h文件

#import <UIKit/UIKit.h>

        @interface AddEventViewController : UIViewController <UITextFieldDelegate>

        @end 

.m文件

@property (weak, nonatomic) IBOutlet UITextField *textField1;
    @property (weak, nonatomic) IBOutlet UITextField *textField2;
    @property (weak, nonatomic) IBOutlet UITextField *textField3;
    - (IBAction)textFieldReturn:(id)sender;

    @end

    @implementation AddEventViewController

    @synthesize textField1, textField2, textField3;

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }

    - (IBAction)textFieldReturn:(id)sender;
    {
        [sender resignFirstResponder];
    }

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.textField1.delegate = self;
        textField1.delegate = self;


        // Do any additional setup after loading the view.
    }

    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }

    - (void)touchesBegan: (NSSet *) touches withEvent: (UIEvent *)event
    {
        if (textField1)
        {
            if ([textField1 canResignFirstResponder]) [textField1 resignFirstResponder];
        }
        [super touchesBegan: touches withEvent: event];

        if (textField2)
        {
            if ([textField2 canResignFirstResponder]) [textField2 resignFirstResponder];
        }
        [super touchesBegan: touches withEvent: event];

        if (textField3)
        {
            if ([textField3 canResignFirstResponder]) [textField3 resignFirstResponder];
        }
        [super touchesBegan: touches withEvent: event];
    }


    - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        [textField1 resignFirstResponder];
        return NO;

        [textField2 resignFirstResponder];
        return NO;

        [textField3 resignFirstResponder];
        return NO;
    }

    @end

Ok so im getting the yellow bug symbol on the lines:

    - (void)viewDidLoad
    {
      [super viewDidLoad];
        self.textField1.delegate = self;
        textField1.delegate = self;
    }

我不知道如何委派我的所有textFields?我如何使这个textFieldReturn适用于我的所有textFields .. viewDidLoad区域必须是问题,因为其他一切都很好......

3 个答案:

答案 0 :(得分:1)

将UITextViewDelegate切换到头文件中的UITextFieldDelegate。这应该做到这一点。如果你还有问题,请告诉我。

答案 1 :(得分:1)

在.h文件中设置textField的代理而不是textView。 &安培;在.m文件中替换以下textFieldShouldReturn方法

的代码
 - (BOOL)textFieldShouldReturn:(UITextField *)textField
 {
     if (textField == textField1)
     {
         [textField1 resignFirstResponder];
     }
     else if (textField == textField2)
     {
         [textField2 resignFirstResponder];
     }
     else if (textField == textField3)
     {
         [textField3 resignFirstResponder];
     }
     return YES;
}

对于使用以下代码的textView。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if([text isEqualToString:@"\n"]) 
    {
        [textView resignFirstResponder];
        return NO;
    }

    return YES;
}

答案 2 :(得分:1)

标记您的文本字段,以在委托方法中区分它们。如果您不希望区分,那么只需使用您在委托方法中获得的引用。

如果使用标签,可以使用开关。

 switch(sender.tag)
{

  case <case value>
  //your code
  break;
}