UISplitViewController切換控制器

SplitViewController在顯示前必須要設置主視圖控制器,明細視圖控制器可不設置

// 創(chuàng)建splitViewController 在顯示前必須設置主視圖控制器,可以不設置明細控制器
// SplitViewController可以通過addChildViewController添加子控制器,但是只有添加的第一個子控制器會被設置在主視圖控制器的位置上,第二個控制器會被設置在明細視圖控制器的位置上
// 允許繼續(xù)添加,但是不會被顯示
        
// 設置主視圖
self.masterViewController = [[JSMasterViewController alloc] init];
[self addChildViewController:self.masterViewController];
        
// 設置詳情視圖
UIViewController *detailViewController = [[UIViewController alloc] init];
detailViewController.view.backgroundColor = [UIColor randomColor];[self addChildViewController:detailViewController];

系統(tǒng)為我們提供了兩個方法,用來切換視圖控制器


// 切換主視圖控制器或明細控制器
- (void)showViewController:(UIViewController *)vc sender:(nullable id)sender NS_AVAILABLE_IOS(8_0);

// 切換明細視圖控制器
- (void)showDetailViewController:(UIViewController *)vc sender:(nullable id)sender NS_AVAILABLE_IOS(8_0);

下面的代碼所處于主視圖控制器下

  • 切換明細視圖控制器示例代碼:
    // 切換明細視圖控制器
    /*
        參數(shù)1: 新的明細控制器 (如果已經(jīng)存在明細控制器,且原來的明細控制器沒有其他強引用,則切換新明細控制器后,圓明細控制器由于沒有強引用會被釋放
        參數(shù)2: 事件響應的發(fā)起者 (控制器) ,事件響應者鏈條監(jiān)聽中需要根據(jù)這個參數(shù)判斷是哪個控制器 
     */

    UIViewController *detail = [[UIViewController alloc] init];
    detail.view.backgroundColor = [UIColor randomColor];
    [self.splitViewController showDetailViewController:detail sender:self];


切換明細視圖控制器.gif

當前在主視圖控制器下,所以傳入了self ,但這里并沒有起到任何作用,傳入nil是一樣的效果
系統(tǒng)會根據(jù)sender用來分辨是誰發(fā)起的事件,因為切換明細視圖控制器的操作,可能是主視圖控制器下的某個按鈕點擊實現(xiàn)的,同樣也可以是視圖控制器內(nèi)部的某個按鈕來實現(xiàn)的,所以提供了這個參數(shù),系統(tǒng)用來分辨事件發(fā)起者

  • 切換主視圖控制器示例代碼:
    /*  切換主視圖控制器或明細控制器
           具體切換哪個位置上的控制器由sender來確定:
        如果sender為當前的主視圖控制器,則切換到主視圖控制器的位置上
        如果sender為明細視圖控制器,則切換到明細視圖控制器的位置上
     */

    // 切換主視圖控制器
    UIViewController *master = [[UIViewController alloc] init];
    [self.splitViewController showViewController:master sender:self];
切換主視圖控制器.gif

這里只是通過showViewController:演示了切換主視圖控制器,如果需要更換明細視圖控制器,只需要將sender改為明細視圖控制器即可

    UIViewController *detail = [[UIViewController alloc] init];
    detail.view.backgroundColor = [UIColor randomColor];

    [self.splitViewController showViewController:detail sender:self.splitViewController.viewControllers[1]];
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容