使用Core Data和NSFetchedResultsControllers预先填充UITextField

时间:2014-03-10 18:24:03

标签: ios core-data uitextfield uitableview nsfetchedresultscontroller

我有一个简单的应用程序,我需要一些新功能的帮助。

应用程序是一个表格视图(TV1),由用户添加一个条目(导航栏中的一个按钮,用于填写名称,事件和金额文本字段的用户填写新的视图控制器)。从日期选择器中选择日期)。

表视图控制器是选项卡栏控制器的一部分,其中第一个选项卡显示所有内容(时间轴),第二个选项卡仅显示事件列表。如果单击某个事件,则会转过来查看该事件的所有事务。

我在这里添加了一个条形按钮项目,它会分割到Add Entry视图控制器,目的是让事件已经被选中。

我的意思是:

假设您的交易中有3个名为Wedding,Birthday和Anniversary的活动。如果单击“事件”选项卡,您将在“表格”视图中看到婚礼,生日和周年纪念日。点击生日将显示event = Birthday的所有交易。

我有一个条形按钮项目,允许我从这个屏幕添加条目,但由于它来自生日事件,我希望已经填写了该事件文本字段,在名称为此的添加条目中事件(在这种情况下是生日)。

我正在使用Core Data和NSFetchedResultsController。

现在的情况是,当我按下按钮从所选事件(生日)添加新条目时,它不会在添加条目屏幕中使用生日预先配置事件文本字段。

这里有一些代码可以解释我在做什么。

从“事件”标签

// This segues over to the selected event (Birthday). 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *indexPath = [self.eventTableView indexPathForCell:sender];
    Occasion *selectedOccasion = [self.fetchedResultsController objectAtIndexPath:indexPath];
    if ([segue.identifier isEqualToString:@"Selected Occasion Segue"])
    {
        ESelectedOccasionTableViewController *selectedOccasionTVC = [segue destinationViewController];
        [selectedOccasionTVC setOccasion:selectedOccasion];
    }
}

在Selected Event选项卡(Birthday)中,我创建了两个segue,一个用于编辑单元格,另一个用于创建新条目:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *indexPath = [self.selectedOccasionTableView indexPathForCell:sender];
    Transaction *seletedTransaction = [self.fetchedResultsController objectAtIndexPath:indexPath];
    // The first segue is to "edit" the existing entry
    if ([segue.identifier isEqualToString:@"Editable Cell"])
    {
        EDetailViewController *dvc = (EDetailViewController *)segue.destinationViewController;
        dvc.selectedTransaction = seletedTransaction;
    }
    // This segue is to create a new entry from the event
    else if ([segue.identifier isEqualToString:@"Create New Entry From Event"])
    {
        EddEntryViewController *eAppEntryViewController = (EAddEntryViewController *)segue.destinationViewController;
        [eAppEntryViewController setSelectedTransaction:selectedTransaction]; 
    }
}

第一个segue用于编辑单元格(完美地工作),但是在第二个segue中,我在这里感兴趣的那个,我实际上并没有点击一个单元格;我点击一个条形按钮项目,它将以模态方式显示添加条目。我想从此表视图中仅获取“事件”(生日)并预先填写“添加条目”中的“事件文本字段”。

The setSelectedTransaction in the Add Entry is:

- (void)setSelectedTransaction:(Transaction *)selectedTransaction
{
    _selectedTransaction = selectedTransaction;
    self.occasionTextField.text = _selectedTransaction.occasion.title;
}

我无法想象我离这个工作还很远,但是对此的任何帮助都会很棒,因为我真的被困住了。

我应该在viewDidLoad中设置一些东西吗? (那也不起作用)。

我没有选择表格视图单元格,这就是为什么我理解[eAppEntryViewController setSelectedTransaction:selectedTransaction]; line实际上没有传递任何东西,因为我点击了一个条形按钮项,而不是一个表视图单元格。

该模型是:链接到日期和事件实体的交易实体。

2 个答案:

答案 0 :(得分:1)

我已通过以下方式解决了这个问题:

 EAddEntryViewController *eAppEntryViewController = (EAddEntryViewController *)segue.destinationViewController;
    [eAppEntryViewController setSelectedEvent:self.occasion.title]; 

其中:

- (void)setSelectedEvent:(NSString *)selectedEvent
{
    _selectedEvent = selectedEvent;
}

在viewWillAppear中,我做了:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.occasionTextField.text = self.selectedEvent;
}

这就是它的工作方式,我对此很满意。

答案 1 :(得分:0)

所以我可能不完全理解这个问题。但你可以添加一个" Touch Up Inside"将事件发送到栏按钮项,然后从"发件人"中拉出文本。宾语。然后,将该文本作为NSString属性存储在界面中供以后使用,或者直接从栏按钮项操作设置所需的文本框。