iOS-C控制器返回到A控制器

如果你的A控制器剛好不是RootViewController時(shí)捕发,那么該如何從C控制器返回到A控制器呢猴娩?顯然popToRootViewControllerAnimated :方法不能使用。筆者提供兩種方法,推薦使用方式二


方式一:

思路:
1.在B控制器寫一個(gè)回調(diào)block,假設(shè)命名為callbackBlock

2.在A控制器中給B控制器callbackBlock賦值沛膳。

3.原本是在B控制器push C控制器的。其實(shí)我們可以這樣汛聚,在B控制器執(zhí)行popViewControllerAnimated:方法(注意:方法參數(shù)設(shè)置為NO)锹安,接著在popViewControllerAnimated:方法的下一行代碼執(zhí)行callbackBlock。迫使代碼執(zhí)行又回到的A控制器

4.在A控制器執(zhí)行push方法叹哭,從A控制器push到C控制器忍宋,這樣一來,你在C控制器返回時(shí)风罩,就直接到A控制器了糠排。我們的目的也就達(dá)到了。

核心代碼在A超升、B兩控制器中入宦,具體實(shí)例代碼如下:
A控制器代碼:

//A控制器.m文件
#import "AController.h"
#import "BController.h"
#import "CController.h"

@implementation AController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = [UIColor purpleColor];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    
    BController *b_controller = [[BController alloc] init];
    
    b_controller.callbackBlock = ^{
        
        CController *c_controller = [[CController alloc] init];
        
        [self.navigationController pushViewController:c_controller animated:YES];
    };
    
    [self.navigationController pushViewController:b_controller animated:YES];
    
}

@end

B控制器代碼:

//B控制器.h文件
#import <UIKit/UIKit.h>

@interface BController : UIViewController
/** 回調(diào)block */
@property(nonatomic, copy) void(^callbackBlock)();
@end

//B控制器.m文件
#import "BController.h"

@implementation BController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = [UIColor greenColor];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    
    // 注意:這里返回不要?jiǎng)赢嫞駝t切換效果很難看
    [self.navigationController popViewControllerAnimated:NO];
    
    // block不為nil時(shí)回調(diào)
    if (_callbackBlock != nil) _callbackBlock();
}

@end

方式二

受評(píng)論區(qū)大神指點(diǎn)室琢,這里提供另外一種返回到A控制器的方法乾闰,核心代碼在C控制器類中,代碼如下:

核心代碼在C控制器中盈滴,如下:
C控制器代碼:

//C控制器.m文件
#import "CController.h"
#import "AController.h"

@implementation CController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = [UIColor yellowColor];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    
    for (UIViewController *controller in self.navigationController.viewControllers) {
        
        if ([controller isKindOfClass:[AController class]]) {
            
            [self.navigationController popToViewController:controller animated:YES];
        }
    }
    
}

@end

兩種方式的使用感受

經(jīng)過一段時(shí)間使用涯肩,筆者發(fā)現(xiàn),這兩種方法各有各的有點(diǎn)雹熬。前者在這里看起來代碼多宽菜,但是實(shí)際運(yùn)用中谣膳,代碼量不相上下竿报。筆者感覺第一種方法優(yōu)于第二種。具體哪個(gè)方式更好继谚,期待你實(shí)踐之后的回復(fù)哦烈菌!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市花履,隨后出現(xiàn)的幾起案子芽世,更是在濱河造成了極大的恐慌,老刑警劉巖诡壁,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件济瓢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡妹卿,警方通過查閱死者的電腦和手機(jī)旺矾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來夺克,“玉大人箕宙,你說我怎么就攤上這事∑膛Γ” “怎么了柬帕?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我陷寝,道長(zhǎng)锅很,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任盼铁,我火速辦了婚禮粗蔚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饶火。我一直安慰自己鹏控,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布肤寝。 她就那樣靜靜地躺著当辐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鲤看。 梳的紋絲不亂的頭發(fā)上缘揪,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音义桂,去河邊找鬼找筝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛慷吊,可吹牛的內(nèi)容都是我干的袖裕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼溉瓶,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼急鳄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起堰酿,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤疾宏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后触创,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坎藐,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年哼绑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岩馍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凌那,死狀恐怖兼雄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帽蝶,我是刑警寧澤赦肋,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布块攒,位于F島的核電站,受9級(jí)特大地震影響佃乘,放射性物質(zhì)發(fā)生泄漏囱井。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一趣避、第九天 我趴在偏房一處隱蔽的房頂上張望庞呕。 院中可真熱鬧,春花似錦程帕、人聲如沸住练。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)讲逛。三九已至,卻和暖如春岭埠,著一層夾襖步出監(jiān)牢的瞬間盏混,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工惜论, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留许赃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓馆类,卻偏偏與公主長(zhǎng)得像混聊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹦掐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,140評(píng)論 30 470
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理技羔,服務(wù)發(fā)現(xiàn)僵闯,斷路器卧抗,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • 翻譯自“View Controller Programming Guide for iOS”。 1 彈出視圖控制器...
    lakerszhy閱讀 3,518評(píng)論 2 20
  • 1.《日記》 我把石頭還給石頭鳖粟,讓勝利的勝利 今夜青稞只屬于她自己社裆, 姐姐,今夜我不關(guān)心人類向图,我只想你泳秀。 2.《祖...
    愛醬lll閱讀 679評(píng)論 10 5
  • 少年游·算來好景只如斯 算來好景只如斯。惟許有情知榄攀。尋常風(fēng)月嗜傅,等閑談笑,稱意即相宜檩赢。 十年青鳥音塵斷吕嘀,往事不勝思。...
    秋屯閱讀 193評(píng)論 0 0