我的应用在表格单元格中有一个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类。
答案 0 :(得分:0)
delegate
(确保采用UITextFieldDelegate
协议)。
-(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。