代码之家  ›  专栏  ›  技术社区  ›  fuzzygoat

有无UitExtFieldDelegate?

  •  2
  • fuzzygoat  · 技术社区  · 14 年前

    我对使类符合UItextfieldDelegate很好奇,在过去,我总是添加它以允许访问协议中定义的方法。然而,上一次我忘了添加它,后来才意识到它丢失了。我的问题是,为什么它在有或没有的情况下工作,我认为需要它来正确地访问协议方法?

    @interface MyController : UIViewController <UITextFieldDelegate> {
        UITextField *text_001;
    }
    @property(nonatomic, retain) IBOutlet UITextField *text_001;
    @end
    

    或:

    @interface MyController : UIViewController {
        UITextField *text_001;
    }
    @property(nonatomic, retain) IBOutlet UITextField *text_001;
    @end
    

    用:

    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        NSLog(@"Return: ... ");
        [textField resignFirstResponder];
        return YES;
    }
    

    欢呼加里

    1 回复  |  直到 14 年前
        1
  •  5
  •   Ben Gottlieb    14 年前

    委托声明实际上只是编译器提示;显然,您仍然需要实现底层方法。但是,主要目的是让编译器在分配它们时对您进行双重检查。如果您试图手动(在代码中,而不是在ib中)分配一个未声明为这样的委托,您将经常收到编译器警告。

    因为objective-c对大多数东西都使用duck类型(如果它像鸭子一样走路,像鸭子一样嘎嘎叫;如果它对-textfieldshouldreturn等等作出响应),你就相当安全了。