2017-05-10 46 views
0

我在iOS的新的和我面臨的關於創造的UITextField如何創建的UITextField的自定義委託目標C

的自定義委託問題

我的代碼是這樣的

在CustomTableView

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 
{ 
    if([self.delegate respondsToSelector:@selector(textFieldShouldEndEditing:)]) 
    { 
     [self.delegate textFieldShouldEndEditing:textField]; 
    } 

    return YES; 
} 

在視圖控制器

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 
{ 
    return YES; 
} 

但是這種方法不Vie的越來越通話wController。 可以任何機構,請告訴我我做錯了什麼

在此先感謝!

+0

如何在視圖 - 控制分配委託? – KKRocks

+0

我假設'self.delegate = viewController',你可以檢查它的'零? –

回答

1

你不應該手動調用文本框的委託方法,如[self.delegate textFieldShouldEndEditing:textField];

如果你想從另一個調用類的委託方法,然後讓這不是由sdk提供的一些方法!

例如進行方法一樣,

- (BOOL)myTextFieldShouldEndEditing:(UITextField *)textField 
{ 
    return YES; 
} 

,並通過您self.delegate從其他類調用該方法,並確保self.delegatenil,我的意思是有你viewController的對象!

+1

獅子'不能打電話'應該在你的回答中不應該打電話。由於用戶可以手動調用委託方法,但這不是一個好主意。 –

+0

@InderKumarRathore:是的!編輯答案。這是一個錯字!感謝您的建議。 :) – Lion

+0

@Lion它沒有得到調用。你能分享一些更多的代碼嗎? – Muju

0

您需要創建自定義TextField類並在該類中設置委託。像這樣

.h文件中

@interface CustomTextField : UITextField<UITextFieldDelegate> 
@end 

.m文件

@implementation CustomTextField 
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     self.delegate = self; 
    } 
return self; 
} 
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 
    return YES; 
} 
- (void)textFieldDidBeginEditing:(UITextField *)textField{ 
} 
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{ 
    return YES; 
} 
- (void)textFieldDidEndEditing:(UITextField *)textField{ 
} 
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
    return YES; 
} 
- (BOOL)textFieldShouldClear:(UITextField *)textField{ 
    return YES; 
} 
- (BOOL)textFieldShouldReturn:(UITextField *)textField{ 
    return YES; 
} 
@end 
+0

我創建類與你說的一樣,但沒有得到調用。 – Muju