【问题标题】:sending data from DetailViewController to MasterViewController将数据从 DetailViewController 发送到 MasterViewController
【发布时间】:2013-04-07 13:16:42
【问题描述】:

这正是我想要做的。

wizardviewcontroller.m

- (IBAction)onCountryClick:(id)sender {
    MJDetailViewController *detailViewController = [[MJDetailViewController alloc] initWithNibName:@"MJDetailViewController" bundle:nil];
    [self presentPopupViewController:detailViewController animationType:MJPopupViewAnimationSlideLeftRight];
}

用户点击国家按钮,弹出列表显示。

当用户选择一个行按钮标题应该改变。

这是我的详细视图,

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

    WizardViewController *mj = [[WizardViewController alloc]       initWithNibName:@"WizardViewController" bundle:nil];
    mj.countryselected = [countryNames objectAtIndex:indexPath.row];
    [mj.countryButton setTitle:mj.countryselected forState:UIControlStateNormal];
    [self dismissPopupViewControllerWithanimationType:MJPopupViewAnimationFade];
}

DetailViewController 正在关闭,但 countryButtonTitle 没有更新。我知道这是因为向导视图不刷新。我想知道在这种情况下正确的解决方法。

希望这有助于获得更好的答案。

【问题讨论】:

  • 您的代码会创建一个WizardViewController 的new 实例,并在该新实例上设置一个属性。您必须设置 现有 主视图控制器的属性。
  • 我的主视图控制器是 WizardViewController
  • 不完全是……它是一个 WizardViewController 的实例。当您创建一个新对象时,它是一个不同的对象。
  • 您应该在详细视图中使用协议并将master设置为delegate。例如,请参阅实用程序应用程序。

标签: iphone objective-c xcode didselectrowatindexpath message-passing


【解决方案1】:

MJDetailViewController中制作协议

@protocol MJDetailViewControllerDelegate;
@interface MJDetailViewController : UIViewController
@property (nonatomic,assign) id< MJDetailViewControllerDelegate> delegate;
@end


@protocol MJDetailViewControllerDelegate <NSObject>

- (void)selectedContry:(NSString *)title;

@end

然后像这样调用

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

    NSString *title = [countryNames objectAtIndex:indexPath.row];
       if ([self.delegate respondsToSelector:@selector(selectedContry:)]) {
            [self.delegate selectedContry:title];
        }
    [self dismissPopupViewControllerWithanimationType:MJPopupViewAnimationFade];
}

WizardViewController.h 中添加MJDetailViewControllerDelegate 作为protocol)

现在在WizardViewController.m 中实现selectedContry: 方法,例如:

- (void)selectedContry:(NSString *)title
{
    [self.countryButton setTitle:title forState:UIControlStateNormal];
}

希望对你有帮助。

【讨论】:

  • +1 不错的答案,我做了一些编辑。我希望你不会介意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
相关资源
最近更新 更多