ios - 推送时数据未传递到 View Controller

标签 ios xcode uiviewcontroller uinavigationcontroller properties

我有一个带有数据填充的 TableView Controller 。我试图在用户点击单元格时推送一个新的详细信息 View 。我可以加载 View ,但是更详细地显示数据的标签不会更新。这是代码:

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

[tableView deselectRowAtIndexPath:indexPath animated:YES];

SearchDetailViewController *controller = [self.storyboard  instantiateViewControllerWithIdentifier:@"searchDetailVC"];
Events *event = [events objectAtIndex:indexPath.row];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
NSString *dateString = [dateFormatter stringFromDate:event.eventDate];

controller.title=event.eventName; //ONLY ONE THAT WORKS!


controller.eventName.text = event.eventName;
controller.eventAddress.text = event.eventAddress;
controller.eventDate.text = dateString;
controller.eventTime.text = event.eventTime;
controller.ratingView.image = [self imageForRating:event.eventRating];
controller.eventDistance.text = @"NOT YET IMPLEMENTED";

[self.navigationController pushViewController:controller animated:YES];
}

设置的唯一属性是 NavigationController 导航栏的标题。我做错了什么吗?

最佳答案

你不能像这样传递数据。此时 ViewController.domainField 为 nil,因为 View 尚未加载,并且标签/TextField 是在 View 加载时(通过 Nib )创建的,而不是在创建 View Controller 对象后立即创建的。

这段代码可以帮助你

SearchDetailViewController.h
    #import <UIKit/UIKit.h>
    @interface SearchDetailViewController : UIViewController 
    {

        NSString*  eventNameString ;
        NSString* eventAddressString;
        ...........
        .............

    }
    @property (nonatomic,retain) NSString*  eventNameString ;
    @property (nonatomic,retain) NSString*  eventAddressString;
    ...............
    ...............
    @end


SearchDetailViewController.m
- (void)viewDidLoad
{
     [super viewDidLoad];
     eventName.text=eventNameString;
     eventAddress.text=eventAddressString;
     ..........................
     ..........................
    eventNameString=[[NSString alloc]initWithString:@""];
}


TableView.m

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

[tableView deselectRowAtIndexPath:indexPath animated:YES];

SearchDetailViewController *controller = [self.storyboard  instantiateViewControllerWithIdentifier:@"searchDetailVC"];
Events *event = [events objectAtIndex:indexPath.row];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
NSString *dateString = [dateFormatter stringFromDate:event.eventDate];

controller.title=event.eventName; //ONLY ONE THAT WORKS!


controller.eventNameString=[[NSString alloc]initWithString:event.eventName];
controller.eventAddressString=[[NSString alloc]initWithString:eventAddress];
...............................
...............................
............

[self.navigationController pushViewController:controller animated:YES];
}

同样,您必须将所有数据从一个 View 传递到另一个 View - 您不能直接分配给 Controller 。

关于ios - 推送时数据未传递到 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8798188/

相关文章:

c++ - 如何在 Xcode C++ 控制台应用程序中使用 dlib

xcode - 为 Mac OS 命令行工具编写 XCTestCase

ios - UIView 和 UIViewController 有什么区别?

ios - AFNetworking:无法从 AFHTTPRequestOperation 获取响应字符串

ios - 算术运算符和键值编码

ios - 如何获取使用自动布局的 UIView 的 x、y、宽度、高度

ios - 在发布配置中使用 IMP 调用时,方法参数为零

SwiftUI : possible to access ancestor custom `@EnvironmentObject` ? 如果是,怎么办?

ios - 来自一个来源的多个 View 和 UITables,如何填充它们?

swift - 如何在 Swift 中调用现有的导航 Controller