使用 UINavigation 保存后如何返回?

Posted

技术标签:

【中文标题】使用 UINavigation 保存后如何返回?【英文标题】:How can I go back after saving using UINavigation? 【发布时间】:2014-03-29 03:05:45 【问题描述】:

https://www.dropbox.com/s/duosl4d1fdsxehq/Storyboard.png

这是我的实际故事板。 我正在为我的应用程序使用 UINavigation Controller。当我按添加时,我打开视图以将新费用添加到我的表中。 问题是当我按下“保存”时我不知道我应该做什么?我尝试在前一个视图中添加一个新的推送序列并且它正在工作但在后退按钮项目建议我之后返回“添加新费用”视图,它不应该这样做。 我怎样才能重现动画后退按钮但使用我的保存按钮?

【问题讨论】:

【参考方案1】:

在第二个视图控制器上,在处理点击保存按钮的方法中,添加: [self.navigationController popViewControllerAnimated:YES];

【讨论】:

这是一个好的开始,谢谢。但是我在第一个视图控制器中的 tableview 没有更新。 在第一个视图控制器中,添加: - (void)viewWillAppear:(BOOL)animated [super viewWillAppear:animated]; [_tableView 重载数据]; 【参考方案2】:

我知道那是很久以前的事了,但您应该在第二个视图上创建一个委托。

@protocol ExpenseProtocol;

@interface NewExpenseViewController : UIViewController
@property (nonatomic, weak) id<ExpenseProtocol> *delegate;
@end

@protocol ExpenseProtocol <NSObject>
- (void)didCreateNewExpense:(Expense)newExpense;
@end

@implementation NewExpenseViewController

- (void)savePressed:(id)sender 
    if (self.delegate && [self.delegate responseToSelector:@selector(didCreateNewExpense:)]) 
        [self.delegate didCreateNewExpense:_newExpense];
    


@end

然后在你的第一个视图控制器中

@interface ListExpenseViewController () <ExpenseProtocol>
@end

@implementation ListExpenseViewController    

- (void)didCreateNewExpense:(Expense)newExpense 
    if (newExpense) 
        [_arrayExpense addObject:newExpense];
    
    [self.tableView reloadData];


@end

【讨论】:

以上是关于使用 UINavigation 保存后如何返回?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UINavigation 中显示 UISearchBar?

UINavigation 后退栏按钮

来自第二个视图控制器的 UItabBar 但所有视图控制器都有 UInavigation 并返回到 firstViewController 问题

如何将按钮添加到 UINavigation 项?

如何更改 UINavigation leftBarButtonItem 的颜色

UINavigationController的使用介绍