2010-01-19 37 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

相关问题