2013-07-23 23 views
1

我正在與我的textFieldDidBeginEditing方法有點問題..使用textFieldDidBeginEditing標籤

我試圖找出被調用來編輯,所以我可以決定我是否想以移動該文本框或者不讓該字段可見。

這裏是我的方法,我評論過一些東西出來,試圖找出其中的錯誤是:

- (void)textFieldDidBeginEditing:(UITextField *)sender 
{ 
NSLog(@"This method is called"); 
//[self.view setFrame:CGRectMake(0,-120,320,568)]; 
if(sender.tag == _nameF.tag) 
{ 
    NSLog(@"This if is called"); 
    //[self.view setFrame:CGRectMake(0,-120,320,568)]; 
} 

else 
{ 
    NSLog(@"Else called instead"); 
} 

} 

我看「這種方法被稱爲」在日誌中,所以我知道的方法是被稱爲擺在首位,但在那之後,我看到:

2013年7月23日12:27:18.654 SidebarDemo [2110:60B] - [NSConcreteNotification標籤]:無法識別的選擇發送到實例0x15d7b8c0 2013- 07-23 12:27:18.655 SidebarDemo [2110:60b] *由於未捕獲異常終止應用程序'NSInvalidArgu我的代碼沒有看到任何錯誤,但我沒有看到任何錯誤,我的代碼,以至於我沒有看到任何錯誤,我的代碼,我的知識。

這裏有什麼問題?是否有另一種方法可以用來找出正在編輯的文本字段?

謝謝。

+0

如何聲明_nameF? – savner

+0

來自'sender.tag'或'_nameF.tag'的錯誤?該方法是由「UITextFieldDelegate」還是代表「UITextFieldTextDidBeginEditingNotification」通知使用的? – rmaddy

+0

它正在代表UITextFieldTextDidBeginEditingNotification通知使用... – Jacob

回答

2

由於您正在設置UITextFieldTextDidBeginEditingNotification通知來調用textFieldDidBeginEditing:方法,因此您需要更改方法參數。爲避免與相應的UITextFieldDelegate方法混淆,您應該重命名此方法(這意味着您需要更新註冊通知處理程序的代碼行)。

- (void)textFieldDidBeginEditingHandler:(NSNotification *)notification { 
    UITextField *textField = (UITextField *)notification.object; 

    // It's OK to use == here since we really do want to compare pointer values 
    if(textField == _nameF) { 
     NSLog(@"This if is called"); 
     //[self.view setFrame:CGRectMake(0,-120,320,568)]; 
    } else { 
     NSLog(@"Else called instead"); 
    } 
} 

由於您對每個文本字段都有ivars,所以不需要標籤。

順便說一句 - 爲什麼你使用這個通知?爲什麼不使用UITextFieldDelegate方法?

+0

我只是嘗試在我的代碼中進行上述更改,但我得到了類似的錯誤,但是這次我不相信該方法首先被調用,因爲「調用此方法」不在日誌中。有任何想法嗎?你能解釋一下uitextfield委託方式嗎?謝謝 – Jacob

+0

什麼是錯誤?您是否確保註冊通知時使用的方法與您使用的新方法名稱的名稱相匹配?搜索「UITextFieldDelegate」的文檔。有大量的文檔和示例應用程序顯示如何使用它。 – rmaddy

+0

這是問題,我忘了改變它。非常感謝你! – Jacob