我在瀏覽我的視圖時遇到了一些問題。 這裏是我的配置: 我有1個Tabbar控制器有2個關係segues嵌入到導航控制器內的2個簡單視圖。 現在我想從視圖控制器1導航到視圖控制器3,我也想顯示在tabbar內選擇正確的選項卡。如果我來自視圖控制器1,我還希望後退按鈕將我重定向到前一個選項卡。我嘗試了在視圖之間連接的segue,但如果我這樣做,它只是將視圖控制器推到導航堆棧上,但不會更改選項卡。所以,我現在的問題是,什麼是管理這個問題如何從一個標籤切換到另一個標籤?
截圖的最佳方式:
我在瀏覽我的視圖時遇到了一些問題。 這裏是我的配置: 我有1個Tabbar控制器有2個關係segues嵌入到導航控制器內的2個簡單視圖。 現在我想從視圖控制器1導航到視圖控制器3,我也想顯示在tabbar內選擇正確的選項卡。如果我來自視圖控制器1,我還希望後退按鈕將我重定向到前一個選項卡。我嘗試了在視圖之間連接的segue,但如果我這樣做,它只是將視圖控制器推到導航堆棧上,但不會更改選項卡。所以,我現在的問題是,什麼是管理這個問題如何從一個標籤切換到另一個標籤?
截圖的最佳方式:
這裏有一個辦法做到這一點。但我發佈這真的說明你爲什麼不應該做到這一點。
無論如何,如果你仍然想做到這一點... 。
ViewController1
有着「跳轉到VC3」按鈕,線材達jumpToVC3:
//ViewController1.m
#import "ViewController1.h"
@implementation ViewController1
- (IBAction)jumpToVC3:(id)sender {
NSArray* viewArray = [[[self.tabBarController viewControllers] objectAtIndex:1] viewControllers];
[[[viewArray lastObject] view] setTag:1];
[self.tabBarController setSelectedIndex:1];
}
@end
「jumptToVC3」切換我們選項卡,並設置最前面的視圖的視圖標籤屬性設置爲1 IF最前面的視圖是VC2,這會立即觸發VC3。如果最前面的視圖是VC3,則會正確設置後退按鈕。如果其他視圖控制器被添加到此堆棧,則此導航將會中斷。
ViewController2
有着 「移動到VC3」 按鈕,有線到故事板順着接下去VC3 「toVC3」
// ViewController2.m
#import "ViewController2.h"
#import "ViewController3.h"
@implementation ViewController2
//we use the view.tag property as a switch:
//0 = do nothing
//1 = segue to VC3
//2 = go to tab 0
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (self.view.tag ==1){
[self performSegueWithIdentifier:@"toVC3" sender:self];
} else if (self.view.tag == 2){
[self.tabBarController setSelectedIndex:0];
}
self.view.tag = 0;
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if (self.view.tag ==1) {
[[segue.destinationViewController view] setTag:1];
} else {
[[segue.destinationViewController view] setTag:0];
}
self.view.tag = 0;
}
- (void) viewWillDisappear:(BOOL)animated
{
self.view.tag = 0;
}
@end
ViewController3
覆蓋的後退按鈕,如果它是view.tag是設置爲1.如果您希望上下文的後退按鈕保持一致,則還需要覆蓋默認行爲。你將無法獲得標準的後退按鈕來查看這種覆蓋行爲。
// ViewController3.m
#import "ViewController3.h"
@implementation ViewController3
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (self.view.tag == 1) {
self.navigationItem.leftBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"0.0"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(goBack:)];
}
self.view.tag = 0;
}
- (IBAction)goBack:(id)sender {
[[[[self.navigationController viewControllers]
objectAtIndex:0] view] setTag:2];
[self.navigationController popToRootViewControllerAnimated:YES];
}
@end