将数据从detailViewController传递回UITableView

时间:2013-06-27 16:18:23

标签: uinavigationcontroller uitableview segue

我目前正处于需要更新UITableviewCell的问题。

当用户按下uitableviewcell - THERES ONLY 1 !!时,用户被推送到UITABLEVIEWCONTROLLER,用户可以在其中选择具有自己标题的多个单元格中的一个。

我需要获取单击的tableviewcells标题并将值传递回parentviewcontroller,并将1 tableviewcell的名称更新为用户在推送的uitableivewcontroller中单击的名称。

这是父视图控制器的图片...... Parent Controller

继承人推着的viewcontroller图片...... Child Controller

我昨天早些时候被告知需要代表团,但我不确定此时该做什么:/。

这是我在父视图控制器中使用的一些代码......

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

}

我也没有使用故事板,只有几个xib。

此外,当选择一个单元格时,pushviewcontroller的代码会弹出到父视图控件...

#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 个答案:

答案 0 :(得分: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;

现在您已在父视图控制器中设置了委托....接下来查看相同的文件实现文件(.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];
}

这就是!!!! ..... :),希望这是一个简单而基本的教程,这是一个快照。

BOO YA!!!!