我在Xcode 5.1.1中开发了一款针对iOS 7的应用程序。我最近升级到了Xcode 6,并清理了所有内容以确保功能。唯一没有完全工作的是登录后的segue触发器,它现在正在闪烁我试图跳过的视图的屏幕。这是一个已知的问题吗?我该如何避开它?它在Xcode 5.1.1中运行良好。
为了在文本中重述,我有一个登录屏幕,它切换到导航控制器。导航控制器中的第一个视图控制器是仪表板,第二个是欢迎屏幕。在他们登录后,我正在加载导航控制器,但跳过仪表板并自动切换到欢迎屏幕。此分段在仪表板中执行,将显示分段代码视图(见下文)。
- (void)viewWillAppear:(BOOL)animated
{
if (self.pushToHomePage)
{
[SVProgressHUD showWithStatus:@"Loading..."];
self.pushToHomePage = NO;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:NO forKey:@"WelcomeCached"];
[defaults setObject:nil forKey:@"WelcomeItems"];
[defaults setObject:nil forKey:@"WelcomeSliders"];
[defaults setObject:nil forKey:@"WelcomeEvents"];
[self performSegueWithIdentifier:@"HomePageSegue" sender:self];
}
else if (self.pushToTradeSignals)
{
[SVProgressHUD showWithStatus:@"Loading..."];
self.pushToTradeSignals = NO;
[self performSegueWithIdentifier:@"TradeSignalsSegue" sender:self];
}
else
{
[super viewWillAppear:animated];
PFUser *user = [PFUser currentUser];
self.lblName.text = [user objectForKey:@"name"];
PFFile *imgProf = [user objectForKey:@"ProfilePic"];
[self.imgProfile setImageWithURL:[NSURL URLWithString:imgProf.url]
placeholderImage:[UIImage imageNamed:@"default_user_icon.png"]];
NSArray *parts = [self.lblName.text componentsSeparatedByString:@" "];
if (parts != nil && parts.count > 1)
[self.lblName boldSubstring:parts[1]];
for (NSIndexPath *indexPath in self.tableView.indexPathsForVisibleRows)
{
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[self setCellColor:[UIColor clearColor] ForCell:cell];
}
[self.navigationController.toolbar setBarTintColor:[UIColor whiteColor]];
[self.navigationController.toolbar setBackgroundColor:[UIColor whiteColor]];
[self.navigationController.toolbar setTintColor:[UIColor darkGrayColor]];
[self.navigationController.toolbar setTranslucent:NO];
[self.navigationController.toolbar setBackgroundImage:[UIImage new]
forToolbarPosition:UIBarPositionAny
barMetrics:UIBarMetricsDefault];
[self.navigationController.toolbar setShadowImage:[UIImage new]
forToolbarPosition:UIToolbarPositionAny];
[self.navigationController setNavigationBarHidden:YES animated:YES];
[self.navigationController setToolbarHidden:NO animated:YES];
}
}
这里有两个问题。
- 你总是要打电话给
[super viewWillAppear:animated:]
。省略此调用会导致未定义的行为 - 当另一个屏幕转换正在进行时,您不能呈现新屏幕。这也会导致未定义的行为。即不要在
viewWillAppear
或viewWillDisappear
中显示另一个屏幕
您应该同时设置两个视图控制器来创建UINavigationController
。