使用自定义init访问UITableViewController

时间:2014-06-16 01:37:57

标签: ios objective-c uitableview initialization

我有一个简单的push segue,从一个UITableViewController到另一个。在启动另一个UITableViewController时,我想传递一个id,用于执行sqlite查询并填充表。我可以使用公共属性并在自定义setter中重新加载表,但如果在启动时完成设计似乎更好。经过一段时间的搜索,我找不到任何明确的例子。我看到了initWithCoderinitWithFrame的提及,但他们还不够清楚,无法将其与我想要做的事情联系起来。

以下是第一张表格中的segue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"ShowFlashcards"]) {
        //pass variable to custom init somewhere around here?
        FlashcardsTableViewController *flashcardsTableViewController = [segue destinationViewController];

    }
}

以下是自定义init的样子:

@property (nonatomic, strong) NSNumber *listId;
@property (nonatomic, strong) NSArray *flashcards;

- (id)initWithListId:(NSNumber *)listId {
    self = [super init];
    if (self ) {
        self.listId = listId;
        Database *db = [[Database alloc] init];
        self.flashcards = [db getWordsFromList:[listId integerValue]];
    }

    return self;
}

2 个答案:

答案 0 :(得分:2)

你过度思考这个问题,并得出了一些错误的结论。

将属性添加到目标VC(视图控制器)并在prepareForSegue中设置它正是您想要做的。

在这种情况下,您无法使用自定义初始化。调用segue会分配和初始化目标VC(实际上,我相信它是使用initWithCoder方法创建的。)当调用prepareForSegue时,目标VC的视图尚未加载,因此您可以设置属性并设置它们到目的地VC的viewDidLoad方法被调用时。

@ AJHacker的答案显示了如何为目标VC提供指向源VC的指针,这在目标需要能够发回数据时非常有用。

答案 1 :(得分:0)

您需要将包含第一个视图引用的属性添加到第二个视图中。例如:

@interface AutoRenewDrop
@property(weak, nonatomic) AddR *callerView;
@end

然后在第二个视图的'done'方法中,你可以像这样更新调用者视图中的变量:

-(IBAction)done:(UIStoryboardSegue *)segue {
[self.navigationController popViewControllerAnimated:YES];
callerView.renewDate.text = transferData;
}

当然,当您启动第二个视图时,您必须设置引用,如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   if ([segue.identifier isEqualToString:@"Check Mark Segue"])
      {
        NSLog(@"Transfering Data");
    AutoRenewDrop *controller = segue.destinationViewController;
    controller.transferData = self.renewDate.text;
    controller.callerView = self; //Here, you are passing the reference to this View
  }
}

希望有所帮助