iPhone SDK:如何从TableCell内的TextField向viewController发送消息?

时间:2010-01-19 17:36:37

标签: iphone events event-handling

我的应用在表格单元格中有一个UITextField。表格单元格是在TableController类中构建的,TableController类也是表委托。 TableController是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类。

2 个答案:

答案 0 :(得分:0)

  1. 将您的控制器设置为文本字段的delegate(确保采用UITextFieldDelegate协议)。
  2. 添加方法
  3. -(void)textFieldDidBeginEditing:(UITextField *)textField {
        [self editingStarted];
    }
    

答案 1 :(得分:0)

您可以保存对父视图控制器的弱引用...并将controlEventType更改为DidBeginEditing ...

应该是这样的;

在你的UITableViewController中:

  

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath   *)indexPath {
.....
[textField addTarget:self   行动:@选择(editingStarted :)   forControlEvents:   UIControlEventDidBeginEditing];
  ....
}

     

- (void)editingStarted:(id)sender {
if if([delegate respondsToSelector:   行动])
[代表   performSelector:action withObject:   (UITextField *)sender.text];
}

     

- (void)setDelegate:(id)del withSelector:(SEL)sel {
delegate =   德尔;
action = sel;
}

在你的viewController中:

  

// ViewController.m

     

- (void)someMethod {
  [tableController setDelegate:self   withSelector:@selector(recieve :)];
}

     

- (void)recieve:(NSString *)textFieldString {
//做东西
}

希望这有点帮助...你应该知道在.h文件中声明什么。

~Natanavra。