【问题标题】:parse data back to viewcontroller将数据解析回视图控制器
【发布时间】:2014-06-12 04:26:43
【问题描述】:

我是 ios 编程新手; 我编写了一个应用程序以在 UITableView 中显示食谱列表,然后在选择一行后,将行标题解析为 UITextField 详细视图。

问题: 我该怎么做才能将详细视图中的标题更改保存到表格视图(我使用情节提要)?

这是我的代码:

NViewController.m:

- (void)viewDidLoad
{
    [super viewDidLoad];

    recipes = [NSArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", nil];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"RecipeCell";
    MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil) {
        cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }
    cell.lblName.text = [recipes objectAtIndex:indexPath.row];
    return cell;
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"showRecipeDetail"]) {
        NSIndexPath *indexPath = [self._tableView indexPathForSelectedRow];
        NDetailViewController *destViewController = segue.destinationViewController;
        destViewController.selectedRowTitle = [recipes objectAtIndex:indexPath.row];
    }
}

NDetailViewController.m:

@interface NDetailViewController ()
@property (weak, nonatomic) IBOutlet UITextField *txtDetailText;

@end

@implementation NDetailViewController

@synthesize selectedRowTitle;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization

    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.txtDetailText.text = selectedRowTitle;
}

【问题讨论】:

  • 如果你的“配方”是一个对象,也许你可以在它出现时将该对象传递给NDetailViewController。然后,当您要关闭详细视图控制器时,将配方对象的名称属性(或您拥有的任何属性)设置为 UITextField 的文本。
  • 请解释你的问题。您是否尝试将数据(在您的情况下为字符串)传递到详细信息视图?您还使用什么视图控制器?导航控制器 ?或 splitviewcontroller。
  • 不,我想将数据从详细视图传递到主视图并更改表视图内容?

标签: ios objective-c uitableview


【解决方案1】:

在 NViewController 中,添加 NSIndexPath 保存:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showRecipeDetail"]) {
    NSIndexPath *indexPath = [self._tableView indexPathForSelectedRow];
    NDetailViewController *destViewController = segue.destinationViewController;
    destViewController.selectedRowTitle = [recipes objectAtIndex:indexPath.row];

    // need to save this indexPath to update when textfield is changed. Because indexPath maybe change if data changes, I think you should choose another field (like KEY, distingue objects)
    destViewController.indexPath = indexPath;
    destViewController.delegate = self;
}
}

-(void)changeTextFieldWithIndexPath : (NSIndexPath*)indexPath content:(NSString*)content;
{
 // you update indexPath to row, and reloadTable
}

NDetailViewController.h:

@protocol NDetailViewControllerDelegate <NSObject>
-(void)changeTextFieldWithIndexPath : (NSIndexPath*)indexPath content:(NSString*)content;
@end

@interface NDetailViewController : ViewController
@property (nonatomic, weak) id<NDetailViewControllerDelegate> delegate;
@end

NDetailViewController.m:当textfiled改变值时,我的方法只是一个例子:

- (void) whenContentOfTextFieldChanged
{
[self.delegate changeTextFieldWithIndexPath:indexPath content:@"content which textfield is changed"];
}

【讨论】:

【解决方案2】:

假设您使用的是 UISplitview 控制器,您可以通过 [self.splitviewcontroller.viewcontrollers objectatindex:0] 访问主视图并在其上调用定义的方法。

您也可以使用通知来传递数据 检查此答案以获取通知示例:How to pass object with NSNotificationCenter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2013-10-21
    相关资源
    最近更新 更多