iPhone SDK: Как отправить сообщение из TextField внутри TableCell в viewController? - PullRequest
0 голосов
/ 19 января 2010

Мое приложение имеет UITextField внутри ячейки таблицы. Ячейка таблицы строится внутри класса TableController, который также является делегатом таблицы. TableController является переменной экземпляра класса ViewController.

Я пытаюсь отправить сообщение экземпляру ViewController, когда пользователь коснется TextField.

Это код, снятый с 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;

}

Первая проблема заключается в том, что метод editCtarrol TableControllers никогда не вызывается. Следующей интересной частью будет отправка сообщения родительскому классу ViewController.

Ответы [ 2 ]

0 голосов
/ 19 января 2010

Вы можете содержать слабую ссылку на ваш родительский контроллер представления ... и изменить controlEventType на DidBeginEditing ...

Должно быть что-то вроде этого;

В вашем UITableViewController:

- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
.....
[textField addTarget: self Действие: @selector (editingStarted :) forControlEvents: UIControlEventDidBeginEditing];
....
}

- (void) editStarted: (id) отправитель {
if ([делегат откликается на выборку: действие])
[делегат executeSelector: действие с объектом: (UITextField *) sender.text];
}

- (void) setDelegate: (id) del withSelector: (SEL) sel {
Delegate = дель;
action = sel;
} ​​

На ваш взгляд Контроллер:

// ViewController.m

- (недействительно) someMethod {
[tableController setDelegate: self withSelector: @selector (recieve :)];
}

- (void) recieve: (NSString *) textFieldString {
// Делать вещи
}

Надеюсь, это поможет ... Вы должны знать, что объявлять в .h файле.

~ Натанавра.

0 голосов
/ 19 января 2010
  1. Установите ваш контроллер как delegate текстового поля (убедитесь, что принят протокол UITextFieldDelegate).
  2. Добавьте метод

.

-(void)textFieldDidBeginEditing:(UITextField *)textField {
    [self editingStarted];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...