2010-01-19 36 views
0

我的應用程序在表格單元格內有一個UITextField。表格單元也是在表格委託類的TableController類中構建的。 TableController是ViewController類的一個實例變量。iPhone SDK:如何從TableCell中的TextField向viewController發送消息?

我想要做的是當用戶觸摸TextField內部時,向ViewController實例發送消息。

這是從TableController剪斷代碼:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

     static NSString *CellIdentifier = @"Cell"; 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

     if (cell == nil) { 
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 
     } 

     cell.textLabel.text = @"test"; 

     UITextField *textField = [[[UITextField alloc] initWithFrame:CGRectMake(1.0, 5.0, 120.0, 25.0)] autorelease]; 
     textField.text = @"test 2"; 
     [textField addTarget:self action:@selector(editingStarted) forControlEvents:UIControlEventTouchUpInside];  
     cell.accessoryView = textField; 
     return cell; 

} 

的第一個問題是,TableControllers方法editingStarted得到從來沒有所謂。下一個有趣的部分是將消息發送到父級ViewController類。

回答

0

你可以保持一個弱引用您的父視圖控制器......和改變controlEventType到DidBeginEditing ...

應該是這樣的;

在你的UITableViewController:

- (UITableViewCell的*)的tableView:(UITableView的*)的tableView的cellForRowAtIndexPath:(NSIndexPath *)indexPath {
.....
[文本框addTarget:自 行動: @selector(editingStarted :) forControlEvents: UIControlEventDidBeginEditing];
....
}

- (無效)editingStarted:(ID)發送方{
如果([委託respondsToSelector: 動作])
[委託 performSelector:動作withObject: (的UITextField *)發送者。文本]; (void)setDelegate:(id)del withSelector:(SEL)sel {
}

del;
action = sel;
}

在你的viewController:

//視圖控制器。米

- (無效)的someMethod {
[tableController setDelegate:自 withSelector:@selector(收到:)];
}

- (無效)收到:(的NSString *)textFieldString {//
做的東西
}

希望這有點幫助......你應該知道在.h文件中聲明。

〜Natanavra。

+0

感謝您的回覆。我會試試這個。非常感謝! – dan

0
  1. 設置你的控制器作爲文本字段的delegate(確保採用UITextFieldDelegate協議)。
  2. 添加方法

-(void)textFieldDidBeginEditing:(UITextField *)textField { 
    [self editingStarted]; 
} 
+0

感謝您的快速回復。但我寧願發送一條不使用委託的直接消息。 當我嘗試與UISwitch完全相同的示例時,它可以工作。 – dan

相關問題