2013-06-27 4 views
0

В настоящее время у меня проблема с UITableviewCell, которую необходимо обновить.Передача данных из detailViewController в UITableView

Когда пользователь нажимает на uitableviewcell - ТОЛЬКО ТОЛЬКО 1 !!, пользователь вводится в UITABLEVIEWCONTROLLER, где пользователю разрешено выбирать 1 из нескольких ячеек со своими собственными заголовками.

Мне нужно получить название щелчка tableviewcells и передать значение обратно в родительский контроллер и обновить имя 1 tableviewcell до того, как пользователь нажал на нажатый uitableivewcontroller.

Вот фотография родительского ViewController ... Parent Controller

И Heres картина толкаемом ViewController .... Child Controller

мне сказали ранее вчера, что делегация будет необходимо, но Я не уверен, что делать в этот момент: /.

Heres некоторый код я использую в родительском ViewController ...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    ProblemTypes *view = [[ProblemTypes alloc] init]; 
    [self.navigationController pushViewController:view animated:YES]; 

} 

Я также НЕ ИСПОЛЬЗУЯ раскадровки, только несколько xibs.

Также Heres код для pushedviewcontroller совать к родительскому ViewController при выборе ячейки ...

#pragma mark - Table view delegate 

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

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSLog(@"Cell's text: %@",cell.textLabel.text); 

    [self.navigationController popViewControllerAnimated:YES]; 
} 

Спасибо, ребята!

ответ

1

Нашли это ... Делегация была решением ... Просто надеюсь, что это САМОЕ ЭФФЕКТИВНОЕ !!! Вот код для делегирования.

Во-первых, реализовать делегат parentViewcontroller и это методы, также не забудьте добавить делегацию в parentviewcontroller ...

@protocol SendFeedBackDelegate 

- (void) didReceiveType:(NSString *) message; 

@end 
@interface SendFeedBackViewController : UIViewController <SKPSMTPMessageDelegate, UITableViewDataSource,UITableViewDelegate, SendFeedBackDelegate> 
{ 
    NSString *subject; 

} 

Далее реализовать метод: - (void) didReceiveType:(NSString *) message; под

@implementation SendFeedBackViewController 

- (void) didReceiveType:(NSString *) message 
{ 
    subject = message; 
    [feedbackTableView reloadData]; 
    // I reload the data because it is needed when this function is going to be called 
    // in the child viewcontroller.... just keep reading :) 
} 

Теперь перейдите к - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath для использования этого примера и моего проекта :)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [feedbackTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    // Configure the cell... 

    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    // THIS IS THE IMPORTANT PIECE OF CODE YOU NEED TO NOTICE..... 
    // it allows for the first thing the tableview cell to be is a static string until subject 
    // it is changed and the user chooses a subject in the childviewcontroller 
    if (subject == nil) { 
     cell.textLabel.text = @"Select a Product"; 
    } else { 
     cell.textLabel.text = subject; 
    } 


    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

    return cell; 
} 

Теперь добавьте протокол к childviewcontroller, чтобы позволить childviewcontroller, чтобы соответствовать parentviewcontroller

В childviewcontroller.h: добавить эти строки кода,

#import "ParentViewController.h" 

@protocol SendFeedBackDelegate; 

@interface FeedbackTypes : UITableViewController 
{ 
    id<SendFeedBackDelegate> delegate; 
} 

@property (nonatomic, assign) id<SendFeedBackDelegate> delegate; 

Теперь вы установили делегат в родитель ViewController .... Далее над головой файл реализации же файлов (.m) и добавить их:

//Add synthesize just under @implementation "ClassName" 

@synthesize delegate; 

// I used a uitableviewcontroller for this example so refer to the problem I have above 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    //NSLog(@"Cell's text: %@",cell.textLabel.text); 
    [delegate didReceiveType:cell.textLabel.text]; 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

и THATS эТО !!!! ..... :) Надеюсь, что это был простой и базовый учебник, и вот хватка выстрел.

BOO YA!!!!