Проблема загрузки файла NIB из TabViewController в iPhone

#iphone #objective-c #uiviewcontroller #uitableview #nib

#iPhone #objective-c #uiviewcontroller #uitableview #перо

Вопрос:

У меня есть UITableViewController (MyViewController.xib). Здесь отображаются 3 строки с их заголовком. У меня есть 3 новых файла xib для заголовка каждой строки.При выборе каждой строки я хочу загружать файл XIB. Я получаю место, когда нажимаю на выбор RowIndex. Но когда я пытаюсь загрузить файл NIB, ничего не происходит. Я имею в виду, что ни программа не завершается сбоем, ни файл NIB не загружается.

Здесь я определяю объявление моего интерфейса.

  #import <UIKit/UIKit.h>

 #import "HistoryShow.h"

@interface MyViewController : UITableViewController {

    NSArray *tableList;

   IBOutlet HistoryShow *historyController;



}

@property (nonatomic,retain) NSArray *tableList;

@property (nonatomic,retain) IBOutlet HistoryShow *historyController;

@end
  

Ниже приведены подробности моей реализации.

  -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


    NSString *str = [NSString stringWithFormat:@"%@",[tableList objectAtIndex:indexPath.row]]; //typecasting

     if([@"History" isEqual:str])
    {
       NSLog(@"!!!!!!!!!!!!!!!");   

     HistoryShow *detailViewController = [[[HistoryShow alloc]initWithNibName:@"HistoryShow" bundle:nil]autorelease];

 [historyController release]; 

    } 
}
  

Это выводит «!!!!!!» на консоль, но следующий «HistoryShow.xib» не загружается.

В чем именно проблема? Заранее спасибо.

Ответ №1:

Вы должны добавить представление к вашему текущему представлению с помощью addSubview: или нажать viewController с помощью navigationController , чтобы увидеть представление.

Что-то вроде этого

 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


NSString *str = [NSString stringWithFormat:@"%@",[tableList objectAtIndex:indexPath.row]]; //typecasting
if([@"History" isEqual:str])
{
NSLog(@"!!!!!!!!!!!!!!!");   
HistoryShow *detailViewController = [[HistoryShow alloc]initWithNibName:@"HistoryShow" bundle:nil];
[self.navigationController pushViewController:detailViewController animated:YES]; //  if you have a navigation controller
[detailViewController release]; 
} 
}
  

Комментарии:

1. Название подразумевает, что он использует шаблон контроллера просмотра вкладок, поэтому я не думаю, что у него будет навигационный контроллер для нажатия.

2. Я сказал, что это вариант. Кроме того, у вас может быть навигационный контроллер внутри TabBarController. это определенно присутствует во многих приложениях. где у вас есть навигационный контроллер внутри tabitems

3. Согласен. Просто не был уверен, что он будет знать, что сначала ему нужно будет создать навигационный контроллер.

Ответ №2:

Вы создаете экземпляр detailViewController , но ничего с ним не делаете.

Попробуйте добавить это после alloc из detailViewController :

 [self presentModalViewController:detailViewController animated:YES];
  

Комментарии:

1. HistoryShow *view2 = [[HistoryShow alloc] initWithNibName:@»HistoryShow» bundle: [NSBundle mainBundle]]; [self.view добавляет SUBVIEW:view2.view]; [Выпуск historyController];

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