#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. Теперь это работает, изменив приведенный выше код. в любом случае спасибо за помощь.