2016-03-02 5 views
0

Я поддерживаю старый код на основе xib-файлов. Все работало нормально, но в последнее время кнопка «Назад» панели навигации в popover больше не отвечает. Я изменил использование UIPopoverController для представления контроллера навигации с использованием стиля UIModalPresentationPopover, но ничего не изменилось. Вот что я делаю:Кнопка навигации на панели навигации ios не отвечает в popover

navController = [[UINavigationController alloc] initWithRootViewController:instrusRootVC]; 
navController.modalPresentationStyle = UIModalPresentationPopover; 
navController.preferredContentSize = CGSizeMake(400.0, 600.0); 
navController.popoverPresentationController.sourceView = self.view; 
navController.popoverPresentationController.sourceRect = sender.frame; 
navController.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp; 
navController.popoverPresentationController.delegate = self; 

[self presentViewController:navController animated:YES completion:nil]; 

где instrusRootVC является контроллером табличное инициализируется initWithNibName

в instrusRootVC, я тогда называю

[[self navigationController] pushViewController:secondVC animated:YES]; 

где secondVC представляет собой новый контроллер представления таблицы инициализировано initWithNibName

Все работает отлично, за исключением того, что кнопка «Назад» на панели навигации не отвечает без обозначения даты

(Если я называю

[[self navigationController] popViewControllerAnimated:YES]; 

где-то в secondVC, он отлично работает.)

Что я делаю неправильно?

Полный код слишком много времени, чтобы идти в комментариях, так вот она:

UINavigationController *navController; 

if (APPTYPE == kTypeMultiInstruWithLevel) { 

    InstrusNamesVC *instrusRootVC = [[InstrusNamesVC alloc] 
      initWithTabInstruTypeNames: myPartitionInfos.partTabInstruNames 
       WithTabAllInstrusModel: myPartitionInfos.partTabInstrus 
      WithTabAllAnnPartByInstru: tabAnnotationsPartitionByInstru]; 
    navController = [[UINavigationController alloc] initWithRootViewController:instrusRootVC]; 

} else { 

    if ([myPartitionInfos.partTabInstrus count] > 1) 
    { 
     InstrusViewController *instrusRootVC = [[InstrusViewController alloc] initWithTabInstrusModel:myPartitionInfos.partTabInstrus WithTabAnnPartByInstru:tabAnnotationsPartitionByInstru]; 
     navController = [[UINavigationController alloc] initWithRootViewController:instrusRootVC]; 

    } 
    // We only have one instru, we skip the instru selection step 
    else 
    { 
     InstruPartitionVersionsVC *instrusRootVC = [[InstruPartitionVersionsVC alloc] initWithIndexInstru: 0 
       WithTabAnnPartByInstru: tabAnnotationsPartitionByInstru]; 

     navController = [[UINavigationController alloc] initWithRootViewController:instrusRootVC]; 
    } 
} 

navController.modalPresentationStyle = UIModalPresentationPopover; 
navController.preferredContentSize = CGSizeMake(400.0, 600.0); 
navController.popoverPresentationController.sourceView = self.view; 
navController.popoverPresentationController.sourceRect = sender.frame; 
navController.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp; 
navController.popoverPresentationController.delegate = self; 

navController.navigationBar.translucent = NO; 
navController.navigationBar.tintColor = SCROLL_COLOR_MMR; 
if(APPDESIGN== kDesignPinkPanther){ 
    navController.navigationBar.barTintColor = [UIColor colorWithRed:240/255.0 green:138/255.0 blue:177/255.0 alpha:1.0]; 
    navController.popoverPresentationController.backgroundColor = [UIColor colorWithRed:240/255.0 green:138/255.0 blue:177/255.0 alpha:1.0]; 
} else if (APPDESIGN== kDesignCarmen){ 
    navController.navigationBar.barTintColor = [UIColor colorWithRed:193/255.0 green:38/255.0 blue:67/255.0 alpha:1.0]; 
    navController.popoverPresentationController.backgroundColor = [UIColor colorWithRed:193/255.0 green:38/255.0 blue:67/255.0 alpha:1.0]; 
} else { 
    navController.navigationBar.barTintColor = BROWN_COLOR_MMR; 
    navController.popoverPresentationController.backgroundColor = BROWN_COLOR_MMR; 
} 

[self presentViewController:navController animated:YES completion:nil]; 

в instruViewController, например, код выглядит следующим образом:

- (id)initWithTabInstrusModel: (NSArray *)pTabInstru 
    WithTabAnnPartByInstru: (NSArray *)pTabAnn 
{ 
self = [super initWithNibName:@"InstrusViewController" bundle:[NSBundle mainBundle]]; 

if (self != nil) 
{ 
    tabInstrusModel = pTabInstru; 
    tabAnnPartByInstru = pTabAnn; 
} 

return self; 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

// init properties 
self.tabInstrusItems = [NSMutableArray array]; 

// Init tabInstruItems 
for (int i = 0; i < [tabInstrusModel count]; i++) 
{ 
    InstrumentPartitionModel *instruTMP = [tabInstrusModel objectAtIndex:i]; 
    [tabInstrusItems addObject:locStr(instruTMP.instruName)]; 
} 

// let selection done before 
self.clearsSelectionOnViewWillAppear = NO; 

// set background custom 
self.tableView.backgroundColor = [UIColor clearColor]; 
UIImage *backgroundImage = [UIImage imageNamed:@"bg_popup.png"]; 
UIImageView *backgroundImageView = [[UIImageView alloc]initWithImage:backgroundImage]; 
backgroundImageView.frame = self.tableView.frame; 
self.tableView.backgroundView = backgroundImageView; 

self.tableView.separatorColor = [UIColor clearColor]; 

self.tableView.rowHeight = 50.0; 

// Set navigation bar title 
UILabel *label = [[UILabel alloc] init]; 
[label formatAsTitlePopover:@""]; 
[self.navigationItem setTitleView:label]; 

я экспериментировал с 1), не указав ничего для self.navigationItem.backBarButtonItem 2), используя это:

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

3) с помощью этого:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; 

Но это ничего (кроме того, что не изменится, когда я ничего не указать, кнопку заднего дисплея «назад»): кнопка остается неактивной. я даже пытался поставить

self.navigationItem.backBarButtonItem.enabled = YES; 

без какого-либо успеха.

Тогда didSelectRowAtIndexPath выглядит следующим образом:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
[(CustomUITableView *)tableView updateCellSelect : indexPath]; 

InstruPartitionVersionsVC *versionsVC = [[InstruPartitionVersionsVC alloc] 
     initWithIndexInstru: indexPath.row 
    WithTabAnnPartByInstru: tabAnnPartByInstru]; 

// In case of MultiInstruWithLevel, tabAnnPartByInstru only contains partitions for the selected instr type: 
if (APPTYPE == kTypeMultiInstruWithLevel) { 
    NSArray * tabAnnPartTMP = [tabAnnPartByInstru objectAtIndex:indexPath.row]; 
    AnnotationsPartitionModel *annPartTMP = [tabAnnPartTMP objectAtIndex:0]; 
    versionsVC.indexGlobal = annPartTMP.annPartInstruDisplay; 
} else { 
    versionsVC.indexGlobal = indexPath.row; 
} 

// Display new Controller 
[[self navigationController] pushViewController:versionsVC animated:YES]; 
} 

И так далее в течение следующих TableViewControllers ...

я проверил, что все виды таблицы контроллер помещается в стек имеют одинаковый размер.

Теперь, я действительно не знаю, что я мог проверить ....

+0

Покажите свой полный код для приведения решения. – user3182143

+0

Является ли кнопка панели видимой? – user3182143

+0

любезно перейдите по этой ссылке - http://stackoverflow.com/questions/25319179/uipopoverpresentationcontroller-on-ios-8-iphone – user3182143

ответ

0

я до сих пор не понимаю, почему кнопка по умолчанию назад вдруг перестала отвечать, но я нашел оборачиваемость с помощью левой кнопки бара, который работает отлично, и я хотел бы поделиться им.

То, что я сделал это, добавив следующие строки в методе viewDidLoad каждого ViewController предназначен для толкания контроллера навигации, представленный в виде поповера:

if (self != [self.navigationController.viewControllers objectAtIndex:0]) 
{ 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] 
           initWithImage:[UIImage imageNamed:@"ico_back_popover.png"] 
             style:UIBarButtonItemStylePlain 
             target:self 
             action:@selector(leftBtnPressed:)]; 
} 

где leftBtnPressed выглядит следующим образом:

-(IBAction)leftBtnPressed:(id)sender 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
} 
Смежные вопросы