最近發(fā)現(xiàn)一個(gè) bug廷没,setViewControllers:animated: 不生效
復(fù)現(xiàn)場(chǎng)景:
需要?jiǎng)h除 上一個(gè) controller降狠,于是在 viewDidAppear 中
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
if (_removePreviousControllerCount < array.count-1) {
self.hidesBottomBarWhenPushed = YES;
[array removeObjectsInRange:NSMakeRange(array.count -1 - _removePreviousControllerCount, _removePreviousControllerCount)];
[self.navigationController setViewControllers:array animated:NO];
}
但是如果這時(shí)候彈出一個(gè) UIAlertController 的話辟癌,那么 這個(gè)設(shè)置就不生效了派歌。這個(gè)網(wǎng)上也沒有人發(fā)現(xiàn)是什么問題埃撵。于是自己想了一個(gè)解決方案,在 alertController 消失的時(shí)候氢拥,再來刪除一次蚌铜。
但是在 iOS8 系統(tǒng)上面沒有這個(gè)問題锨侯。所以再次刪除的時(shí)候,還需要判斷前面是否真的已經(jīng)刪除成功
- (void)viewDidLoad
{
...
self.origionViewControllers = [self viewControllers];
...
}
#pragma mark - viewcontrollers
- (BOOL)isRemoveSuccess
{
if (_removePreviousControllerCount > 0) {
NSArray *current = [self viewControllers];
if ([self isViewControllers:current equalTo:self.origionViewControllers]) {
// 一樣厘线,說明沒有刪除成功
return NO;
}
}
return YES;
}
- (BOOL)isViewControllers:(NSArray<NSString *> *)arr1 equalTo:(NSArray<NSString *> *)arr2
{
if (arr1.count != arr2.count) {
return NO;
}
for (int i = 0; i<arr1.count; i++) {
NSString *vc1 = arr1[i];
NSString *vc2 = arr2[i];
if (![vc1 isEqualToString:vc2]) {
return NO;
}
}
return YES;
}
- (NSArray<NSString *> *)viewControllers
{
NSMutableArray *mutArr = [[NSMutableArray alloc] init];
for (int i = 0; i < self.navigationController.viewControllers.count; i++) {
UIViewController *vc = self.navigationController.viewControllers[i];
NSString *address = [NSString stringWithFormat:@"%@",vc];
[mutArr addObject:address];
if (vc == self) {
// 后面的就先不管了识腿。
break;
}
}
return mutArr;
}
- (void)removeViewControllers
{
if (_removePreviousControllerCount > 0) {
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
if (_removePreviousControllerCount < array.count-1) {
self.hidesBottomBarWhenPushed = YES;
[array removeObjectsInRange:NSMakeRange(array.count -1 - _removePreviousControllerCount, _removePreviousControllerCount)];
[self.navigationController setViewControllers:array animated:NO];
}
}
}