0

这对我来说是一个大问题,我仍然坚持它,所以我希望有人能给我一些指导。

我所拥有的是:

  • 3 个具有多个单元格的表格视图,每个单元格具有多个文本字段。
  • 每次按下这些单元格上的特定文本字段时,就会出现在弹出框内的 1 个表格视图。这个表视图有所有!从我的数据库中检索必要数据的核心数据方法。

一切正常...但是我需要区分 tableview 1 或 2 或 3 中应该出现什么样的数据...所以我知道我必须使用谓词!

我做了什么:(我尝试过其他事情)

- (NSFetchedResultsController *)fetchedResultsController
{
    if (_fetchedResultsController == nil)
    {

        NSFetchRequest *fetchRequestList = [[NSFetchRequest alloc] init];
        NSEntityDescription *entityList = [NSEntityDescription entityForName:@"List"     inManagedObjectContext:self.managedObjectContext];
        [fetchRequestLista setEntity:entityList];

        TableViewOne *table1 = [[Cobertura alloc]init];
        TableViewTwo *table2 = [[Cobertura alloc]init];

        if (table1 textFieldShouldBeginEditing:table1.textFieldPressed)
        {
            fetchRequestList.predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"reference",     arrayTableview1];
        }

        if (table2 textFieldShouldBeginEditing:table2.textFieldPressed)
        {
            fetchRequestList.predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"reference",    arrayTableview2];
        }

        NSSortDescriptor *cellTitle = [[NSSortDescriptor alloc] initWithKey:@"reference"     ascending:YES];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:cellTitle, nil];
        [fetchRequestLista setSortDescriptors:sortDescriptors];

        _fetchedResultsController = [[NSFetchedResultsController alloc]     initWithFetchRequest:fetchRequestLista managedObjectContext:self.managedObjectContext     sectionNameKeyPath:@"referencia" cacheName:nil];
        _fetchedResultsController.delegate = self;
        self.fetchedResultsController = _fetchedResultsController;

        return _fetchedResultsController;
    }

在我的每个表视图中,我的方法 textFieldShouldBeginEditing 中有一个“popoverTableview”实例:

popoverTableview = [self.storyboard     instantiateViewControllerWithIdentifier:@"popoverTableview"];
popover = [[UIPopoverController alloc] initWithContentViewController:popoverTableview];
[popover presentPopoverFromRect:textField.bounds inView:textField permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
popoverTableview.delegate = self;
popoverTableview.popView = self.popover; 

所以,如果我在 tableview1 我需要得到 [NSPredicate predicateWithFormat:@"%K IN %@", @"reference", arrayTableview1];

我应该创建某种我的 tableviewS 可以访问的方法吗?我在这里忘记了什么或没有注意什么?

提前致谢,欢迎提出任何建议!问候

对于遇到与我相同的问题的每个人,这是我为解决而采取的措施:

这是我在按下特定文本字段时创建弹出视图时:

popoverTableview = [self.storyboard      instantiateViewControllerWithIdentifier:@"popoverTableview"]initWithTextFieldTag:myTextFieldThatWasPressed.tag]
popover = [[UIPopoverController alloc] initWithContentViewController:popoverTableview];
[popover presentPopoverFromRect:textField.bounds inView:textField     permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
popoverTableview.delegate = self;
popoverTableview.popView = self.popover;
popoverTableview.aIntVariable = myTextFieldThatWasPressed;

然后在我的popovertableview中:

- (id)initWithTextFieldTag:(int)textFieldTag
{
self.aIntVariable = textFieldTag;

return self;
}

然后在 fetchedResultsController 方法中,您只需要创建简单的 if 来告诉您想要的谓词...

问候

4

1 回答 1

1

如果获取的结果控制器用于弹出表并且您需要知道在哪个表中选择了文本字段,我建议您在创建每个文本字段并创建int _currentTable实例变量时标记它们。这样,当您的textFieldShouldBeginEditing:方法被调用时,您可以使用标签设置 ivar 的值,并在为弹出表创建获取的结果控制器时检查该标签。

所以,而不是

if (table1 textFieldShouldBeginEditing:table1.textFieldPressed)
{
    fetchRequestList.predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"reference",     arrayTableview1];
}

if (table2 textFieldShouldBeginEditing:table2.textFieldPressed)
{
    fetchRequestList.predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"reference",    arrayTableview2];
}

你会有

if (_currentTable == 1) {
    fetchRequestList.predicate = // table one predicate
} else if (_currentTable == 2) {
    fetchRequestList.predicate = // table two predicate
}

更新:

这就是我从代码中覆盖初始化的方式。在您的弹出表视图控制器实现中:

- (id)initWithTableTag:(int)tableTag
{
    self = [super init];
    if (self) {
        _currentTable = tableTag;
    }
    return self;
}

(确保您还在- (id)initWithTableTag:(int)tableTag;标题中声明。)然后,当您创建并呈现弹出控制器时(我假设您正在 textFieldShouldBeginEditing: 委托调用中执行此操作):

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

    // ...

    YourPopoverTableViewControllerClass *vc = [[YourPopoverTableViewControllerClass alloc] initWithTableTag:textField.tag];

    // ...
    // display the popover

    return YES;
}

不幸的是,我不知道如何使用故事板来做到这一点。

于 2013-02-17T03:11:59.397 回答