TableView НЕ переключается в подробный вид при подключении к контроллеру панели вкладок - PullRequest
0 голосов
/ 12 августа 2010

Я создал приложение панели вкладок, удалил по умолчанию FirstView и SecondView и добавил следующие два ViewController:

  1. JustAnotherView (это просто UIViewController с UIView внутри)
  2. MyListOfItems (который является UIViewController с TableView внутри)

У меня есть третий ViewController с именем ListOfItemsDetailViewController с UIView внутри, который должен вызываться, когда пользователь касается одной из ячеек TableView.

Приложение компилируется без проблем. Я могу касаться обеих кнопок панели вкладок, и появляется правильный вид.

ПРОБЛЕМА: Когда я щелкаю ячейку TableView, выполняется код для переключения на подробное представление (без сбоев или ошибок), но представление НИКОГДА не отображается.

Вот снимок экрана приложения и отладчика с NSLog, который показывает, что он прошел мимо pushViewController без сбоев:

http://clip2net.com/clip/m52549/thumb640/1281588813-9c0ba-161kb.jpg

Вот код.

MyListOfItemsViewController.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "ListOfItemsDetailViewController.h";

@interface MyListOfItemsViewController : UIViewController {
    ListOfItemsDetailViewController *listOfItemsDetailViewController;
}

@property (nonatomic, retain) ListOfItemsDetailViewController *listOfItemsDetailViewController;


@end

Вот файл MyListOfItemsViewController.m:

#import "MyListOfItemsViewController.h"
@implementation MyListOfItemsViewController
@synthesize listOfItemsDetailViewController;

#pragma mark -
#pragma mark View lifecycle

- (void)viewDidLoad {
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
    self.title = @"My List Of Items";
    NSLog(@"My List Of Items Did Load");
}

#pragma mark -
#pragma mark Table view data source
// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return 5;
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    NSString *cellMessage;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    cellMessage = [NSString stringWithFormat:@"indexPath: %d",indexPath.row];       
    cell.textLabel.text = cellMessage;
    return cell;
}

#pragma mark -
#pragma mark Table view delegate

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

    ListOfItemsDetailViewController *vcListOfItemsDetail = [[ListOfItemsDetailViewController alloc] 
                                    initWithNibName:@"ListOfItemsDetail" bundle:[NSBundle mainBundle]];
    self.listOfItemsDetailViewController = vcListOfItemsDetail;
    [vcListOfItemsDetail release];
    [self.navigationController pushViewController:self.listOfItemsDetailViewController animated:YES];

    NSLog(@"Did Execute didSelectRowAtIndexPath WITHOUT Crashing or Error.");

}

#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Relinquish ownership any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
    NSLog(@"My List Of Items View Did Unload");
}


- (void)dealloc {
    [super dealloc];
}



@end

Пожалуйста, помогите. Это будет очень ценится !!!

Я сводил себя с ума, пытаясь отключить базовую навигацию на платформе iOS.

Кроме того, простите за вопрос непрофессионала, я знаю, что большинство из вас уже понимают, как это сделать.

Заранее спасибо. Jaosn

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Вместо того, чтобы сделать view-контроллер 2-й вкладки контроллером просмотра таблицы, сделайте его UINavigationController и установите RootViewController для navcontroller как «MyListOfItems». Как только вы это сделаете, у вас будет доступ к свойству navigationController в вашем viewcontroller и вы сможете использовать push и pop.

Или, если вы не хотите этого делать, единственным оставленным способом будет программная анимация между представлениями (т. Е. Удалить один вид и добавить другой или добавить другой вид поверх текущего представления)

0 голосов
/ 12 августа 2010

В tableView:didSelectRowAtIndexPath: вы ссылаетесь на navigController по self.navigationController, который, скорее всего, не существует. Вы должны использовать UINavigationController в качестве одного контроллера представления в вашем tabView, и rootViewController этого навигационного контроллера должен быть MyListOfItemsViewController.

Обратите внимание, что вам нужен UINavigationController для подробного просмотра, а self.navigationController - это только способ получить тот, который был создан и вставлен в иерархию ранее.

...