Заполнение textField из ячейки в TableView показано в Popover - PullRequest
1 голос
/ 18 мая 2011

В View Controller у меня есть кнопка, которая создает popOverCOntroller, который содержит TableView. Когда пользователь выбирает что-то из этого tableView, я хочу, чтобы TextField в ViewController заполнялся текстом из tableView и popOverCOntroller, чтобы не отображать ViewController.

Код popOverCOntroller, ViewController, TableView - все работает. Я не могу понять, как вернуть текст в исходный ViewController.

Спасибо, и я знаю, что это абстрактно. Может ли кто-нибудь поговорить со мной по шагам, которые мне не хватает?

Эрик

1 Ответ

1 голос
/ 18 мая 2011

Вы можете рассмотреть возможность передачи ссылки на текстовое поле или изменяемую строку с помощью пользовательского метода init TableViewController.

Если вы решите передать текстовое поле, вы можете напрямую присвоить значение, когда пользователь выбираетгрести и отклонять вид поповера.Если вы передаете изменяемую строку, вы можете установить ее значение, а затем в методе делегата поповера установить значение текстового поля.

Дайте мне знать, если вам нужен какой-то код, чтобы идти с ним.

Редактировать

@interface DataViewController : UITableViewController {
    UIPopoverController *popOverController;
    UILabel             *labelToUpdate;
}

@property (nonatomic, assign) UIPopoverController *popOverController;
@property (nonatomic, retain) UILabel *labelToUpdate;

@end

Вам необходимо сохранить слабую ссылку наUIPopOverController, если вам нужно программно закрыть его.labelToUpdate - это метка, которую мы собираемся обновить.

@implementation DataViewController

@synthesize popOverController;
@synthesize labelToUpdate;

- (void)dealloc
{
    [labelToUpdate release];
    [super dealloc];
}

....

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...

    self.labelToUpdate.text = event.title;
    [self.popOverController dismissPopoverAnimated:YES];
}

@end

В делегате UIPopOverController, который будет родительским контроллером представления, сделайте это -

// method trigged by button press
- (IBAction)showChoice {
    DataViewController *viewController = [[DataViewController alloc] initWithNibName:nil bundle:nil];

    UIPopoverController *popOverController = [[UIPopoverController alloc] initWithContentViewController:viewController];
    popOverController.delegate = self;

    viewController.labelToUpdate = self.outputLabel;
    viewController.popOverController = popOverController;

    [popOverController presentPopoverFromRect:self.button.frame
                                       inView:self.window // Since I did this of the application delegate
                     permittedArrowDirections:UIPopoverArrowDirectionAny
                                     animated:YES];

}

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
    [popoverController release];
}
...