簡體   English   中英

在iOS中覆蓋Back按鈕時出現問題

[英]Problem over-riding the Back button in iOS

我有一個UITableViewController A,它將UITableViewController B推送到堆棧上。

在A我有代碼:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending" 
                                                                                     style:UIBarButtonItemStylePlain 
                                                                                    target:self 
                                                                                    action:@selector(backButtonClicked:)];

backButtonClicked:也實現了。

B的標題為趨勢,但當我點擊它時,它無法觸及backButtonClicked:

為什么是這樣?

嘗試設置委托:

[navigationController setDelegate:self];

或者使用左鍵。 有時后退按鈕不適用於某些視圖,我不得不使用左按鈕:

self.navigationItem.leftBarButtonItem =  [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];

此外,您可以嘗試設置B的按鈕項而不是A:

viewControllerB.navigationItem.backBarButtonItem =  [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];

在Xcode文檔中,它聲明backBarButtonItem目標和操作應設置為nil。 因此,即使你確實設置了它,它也可能是一個很好的選擇,它會被忽略。 您可以查看下面的鏈接,向后退按鈕添加自定義行為。

后退按鈕項的自定義操作

或者您可以在viewControllerB中執行以下操作:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Trending" 
                                                                             style:UIBarButtonItemStylePlain 
                                                                            target:self
                                                                            action:@selector(backButtonClicked:)] autorelease];

然后還將此添加到viewControllerB

- (void)backButtonClicked:(id)sender {

    [[[self.navigationController viewControllers] objectAtIndex:0] backButtonClicked:sender];

    [self.navigationController popViewControllerAnimated:YES];

}

上面的方法將找到RootViewController並向其發送backButtonClicked消息。 然后它將彈出當前視圖控制器,這應該允許您模擬backBarButtonItem。 您還可以通過更改objectAtIndex方法中的值來更改要發送消息的視圖控制器。

盡量不要使用backBarButtonItem而是使用leftBarButtonItem

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
self.navigationItem.hidesBackButton=YES;

對我來說,它就像一個魅力。 並且不要忘記您沒有釋放此按鈕 - 它可能導致內存泄漏。 所以你可以在為自己分配按鈕時添加自動釋放或者像這樣添加自動釋放

UIBarButtonItem *myBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
self.navigationItem.leftBarButtonItem = myBackButton;
[myBackButton release];
self.navigationItem.hidesBackButton=YES;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM