ViewController 堆栈中移除最上层

本文介绍了一种针对iOS应用中特定页面(如话题详情页)的导航控制器进行优化的方法,通过判断当前可见视图控制器类型并采取不同措施来提高页面加载效率。包括直接刷新页面内容及调整导航堆栈。
if([delete_navigation.visibleViewController isKindOfClass:[TopicViewController class]] && [topicNotification.topic.id isEqualToString:self.otherTopicID]){//判断本身就在当前页时只需刷新即可
           
            TopicViewController *controller=(TopicViewController *)delete_navigation.visibleViewController;
            controller.topicNotification=topicNotification;
            controller.topicId=topicNotification.topic.id;
            [controller refreshTopic];
        }else{
            TopicViewController *controller= [[TopicViewController alloc] initWithNibName:@"TopicViewController" bundle:nil];
            controller.topicNotification=topicNotification;
             controller.topicId=topicNotification.topic.id;
            
            if([delete_navigation.topViewController isKindOfClass:[TopicViewController class]]){
                
                NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: delete_navigation.viewControllers];
                
                // [navigationArray removeAllObjects];    // This is just for remove all view controller from navigation stack.
                [navigationArray removeLastObject];  // You can pass your index here
                delete_navigation.viewControllers = navigationArray;
            }
            
            [delete_navigation pushViewController:controller animated:YES];
            
        }

 这是程序代码,要根据自己的情况 删除 调整

在 `UIViewController` 中,你可以通过操作子视图的层级关系来将 `noMessageView` 置于最上层或最下层。以下是具体的方法: ### 1. 将 `noMessageView` 置于最上层 使用 `bringSubviewToFront:` 方法: ```swift self.view.bringSubviewToFront(noMessageView) ``` ### 2. 将 `noMessageView` 置于最下层 使用 `sendSubviewToBack:` 方法: ```swift self.view.sendSubviewToBack(noMessageView) ``` ### 示例代码 假设你的 `noMessageView` 已经添加到 `viewController` 的 `view` 中,你可以这样操作: ```swift class YourViewController: UIViewController { let noMessageView = UIView() override func viewDidLoad() { super.viewDidLoad() // 配置 noMessageView noMessageView.frame = CGRect(x: 0, y: 0, width: 200, height: 200) noMessageView.backgroundColor = .red self.view.addSubview(noMessageView) // 将 noMessageView 置于最上层 self.view.bringSubviewToFront(noMessageView) // 或者将 noMessageView 置于最下层 // self.view.sendSubviewToBack(noMessageView) } } ``` ### 注意事项 - 确保 `noMessageView` 已经添加到 `self.view` 的子视图中。 - 如果 `noMessageView` 是通过 Interface Builder 添加的,确保它已经正确连接到代码中。 ### 相关方法 - `insertSubview:atIndex:`:在指定的索引位置插入子视图。 - `insertSubview:aboveSubview:`:将子视图插入到另一个子视图之上。 - `insertSubview:belowSubview:`:将子视图插入到另一个子视图之下。 这些方法可以让你更灵活地控制子视图的层级关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值