gpt4 book ai didi

ios - 推送到 TableView Controller 后看不到 View Controller 内容

转载 作者:行者123 更新时间:2023-11-29 02:03:30 31 4
gpt4 key购买 nike

我是 iOS 和 Objective-C 世界的新手,我想创建一个示例应用程序来学习一些东西,但我发现我的程序存在一些问题。

我创建了一个带有书籍名称的 TableViewController,在触摸一本书之后我想看到关于这本书的更多信息。

所以我创建了 book 类什么是 View Controller ,我在这个类中创建了一些带有一些文本的标签。

NSLogs 工作正常。触摸记录后,从 TableView Controller 推送到新 View Controller 的应用程序工作正常,但我看不到那里的任何内容,而不是顶部的白色 bg 和后退按钮。

这是书类:

#import "BooksViewController.h"

@interface BooksViewController ()

@end

@implementation BooksViewController

- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{

if(self){
self.title = self.bookName;
self.view.backgroundColor = [UIColor whiteColor];
}
return self;
}


- (void)viewDidLoad {
[super viewDidLoad];

UILabel *bookNameLabel = [[UILabel alloc] init];
bookNameLabel.text = self.bookName;
bookNameLabel.frame = CGRectMake(10, 10, 300, 50);
[self.view addSubview:bookNameLabel];

UILabel *authorNameLabel = [[UILabel alloc] init];
authorNameLabel.text = self.authorName;
authorNameLabel.frame = CGRectMake(50, 50, 300, 40);
[self.view addSubview:authorNameLabel];

UILabel *bookDescLabel = [[UILabel alloc] init];
bookDescLabel.text = self.bookDesc;
bookDescLabel.frame = CGRectMake(50, 50, 300, 40);
[self.view addSubview:bookDescLabel];

}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}



@end

这是我用来创建图书信息窗口的 TableView Controller 中的一个方法:

    - (void)viewDidLoad {
[super viewDidLoad];


self.bookNames = @[@"Pan Tadeusz", @"Potop", @"Lalka", @"Uczta dla wron", @"Symfonnia C++"];
self.authorsName = @[@"Adam Mickiewicz", @"Henryk Sienkiewicz", @"Bolesław Prus", @"George R.R Martin", @"Jerzy Greborz"];
self.bookDescs = @[@"Opis Pan Tadeusz", @"Opis Potop", @"Opis Lalka", @"Opis Uczta dla wron", @"Opis Symfonnia C++"];


}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Książka na pozycji %ld tapped",indexPath.row);
BooksViewController *bookVC = [[BooksViewController alloc] init];
bookVC.bookName = self.bookNames[indexPath.row];
bookVC.authorName = self.authorsName[indexPath.row];
bookVC.bookDesc = self.bookDescs[indexPath.row];
NSLog(@"Nazwa wybranej książki: %@",bookVC.bookName);
[self.navigationController pushViewController:bookVC animated:YES];

}

最佳答案

你做错了。

首先,创建一个 iVar 来保存用户选择的索引路径,为此,只需在 .m 文件的最顶部添加一个 NSIndexPath 变量。

@implementation yourControllerNameHere (){    //In your code you will have your controller name, just add the NSIndexpath ;)

NSIndexPath *selectedPath;
}

然后您需要在选择 tableview 单元格时执行 segue,为此,将您的 -didSelectRowAtIndexPath 方法替换为:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Książka na pozycji %ld tapped",indexPath.row);
selectedPath = indexPath; //We're saving the selected path to our instance variable ! This is very important otherwise we can't find it again.
[self performSegueWithIdentifier:@"fromBooksToDetail"];

}

并在您的 .m 文件中添加 -prepareForSegue 方法;当你第一次创建它时它应该在那里!只需找到它并添加以下内容

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

if([segue.identifier isEqualToString:@"fromBooksToDetail"]){

BooksViewController *bookVC =(BooksViewController*)segue.destinationViewController;
bookVC.bookName = self.bookNames[selectedPath.row];
bookVC.authorName = self.authorsName[selectedPath.row];
bookVC.bookDesc = self.bookDescs[selectedPath.row];
NSLog(@"Nazwa wybranej książki: %@",bookVC.bookName);
}
}

现在这将不起作用,除非您在 Storyboard 中的两个 View Controller 之间添加一个 segue 链接,因此只需打开您的 Storyboard 并使用右键单击或 ctrl+左键,将鼠标从你的 TableViewController 到你的 BooksController。不要忘记在右侧面板的 Attributes Inspector 中为其指定正确的 identifier!

请注意,我不会那样命名它们;如果 BooksViewController 是 TableViewController 名称,详细信息页面是“BookDetailViewController”,则更有意义。但这只是一个细节。

一旦你有了 segue 链接、performSegue 调用和 prepareForSegue 方法,你就万事大吉了;)

关于ios - 推送到 TableView Controller 后看不到 View Controller 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30078156/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com