2009-07-18 72 views
1

我有一個繼承自UITableViewController的類,這也是根類。這個tableView包含三個自定義的UITableViewCell(從NIB文件加載而不是子類),每個UITableViewCell有一個UITextField。現在我執行代理方法UITableViewCell和UITableView的交互問題,任何解決方案?

- (BOOL)textField:(UITextField *)textField 
     shouldChangeCharactersInRange:(NSRange)range 
     replacementString:(NSString *)string 

我沒有收到任何事件。這個函數永遠不會被解僱,我也試着實現其他的委託方法,但是沒有一個會引發。如何激發這些委託方法?

我也想覆蓋這些UITextField s(它們是UITableViewCell的一部分)的canPerformAction:sender:函數;
如何做到這一點?

回答

1

textField:shouldChangeCharactersInRange:replacementString:方法是UITextFieldDelegate協議的一部分,因此您必須爲這些UITextField設置一個委託。

例如,如果你創建UITextField在你的表視圖位指示代碼,並假定該方法是在同位指示執行,你可以這樣做:

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(x,y,w,h)]; 
[textField setDelegate:self]; 

但是,你說你」從XIB文件重新加載UITableViewCell。您必須以某種方式訪問​​代碼中的UITextField,並在其上調用setDelegate:方法。您可以通過使用UIViewsubviews屬性來執行此操作。例如:

UIViewController *controller = [[UIViewController alloc] initWithNibName:@"foo" bundle:nil]; 
UITextField *textField = (UITextField *)[[controller.view subviews] objectAtIndex:0]; 

雖然在代碼中創建UITextField s是更容易和更優雅,恕我直言。

至於重寫canPerformAction:sender:方法,您必須子類UITextField

+0

感謝Can Berk您的提示,這真的很有幫助。我如何找到索引值傳入objectAtIndex?在這裏,你顯示將值傳遞爲0將始終爲0?因爲我有3個控件tableviewcell,標籤,文本框和一個按鈕。對不起,如果這是基本的問題,但我是iphone編程新手。 – iamMobile 2009-07-18 02:40:51

+0

這取決於您添加子視圖的順序,但由於您要在XIB文件中添加子視圖,因此我想您必須嘗試0到2。正如我所說的,在代碼中創建UITableViewCells而不是在Interface Builder中,這是一個更好的做法。儘量做到這一點,如果可以的話,這將是一個很好的練習。 – 2009-07-18 21:55:08

0

這個類是UITextFieldDelegate嗎?你需要提供更多的信息,來源等...... 事實上,你沒有得到任何事件使我的問題是NIB的東西缺少的東西。出於這個原因,我不使用IB或NIB來解決問題,調試問題變得非常困難。也許張貼您的XML的