Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c xCode:TableView无法查看/访问所有单元格_Objective C_Xcode_Uitableview_Ios7 - Fatal编程技术网

Objective c xCode:TableView无法查看/访问所有单元格

Objective c xCode:TableView无法查看/访问所有单元格,objective-c,xcode,uitableview,ios7,Objective C,Xcode,Uitableview,Ios7,当我按下一个名为AllOK的按钮时,我希望object.selectedIndex为0。这对可见的细胞非常有效。但它不会访问应用程序/屏幕上看不到的单元格。如果你向下滚动并看到它们,它会检查它们,但我希望它这样做,而不必向下滚动 有人知道如何让tableview知道它也有它看不见的单元格吗 我的tableview和按钮代码: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndex

当我按下一个名为AllOK的按钮时,我希望object.selectedIndex为0。这对可见的细胞非常有效。但它不会访问应用程序/屏幕上看不到的单元格。如果你向下滚动并看到它们,它会检查它们,但我希望它这样做,而不必向下滚动

有人知道如何让tableview知道它也有它看不见的单元格吗

我的tableview和按钮代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FancyCell"];
    cell = nil;
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"FancyCell"];
        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
        // add the segmentedControl when you create a new cell
        UIImage *correctImageGreen = [[UIImage imageNamed:@"green.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        UIImage *correctImageGul = [[UIImage imageNamed:@"gul.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        UIImage *correctImageRed = [[UIImage imageNamed:@"red.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        UIImage *correctImageGray = [[UIImage imageNamed:@"gray.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        NSArray *itemArray = [NSArray arrayWithObjects: correctImageGreen, correctImageGul, correctImageRed, correctImageGray, nil];
        UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:itemArray];
        segmentedControl.frame = CGRectMake(310, 7, 150, 30);
        [cell.contentView addSubview:segmentedControl];

        // add an action so we can change our model if the view changes
        [segmentedControl addTarget:self action:@selector(didChangeSegmentedControl:) forControlEvents:UIControlEventValueChanged];

        // use a tag so we can retrieve the segmentedControl later
        segmentedControl.tag = 42;
    }
    // either if the cell could be dequeued or you created a new cell,
    // segmentedControl will contain a valid instance
    UISegmentedControl *segmentedControl = (UISegmentedControl *)[cell.contentView viewWithTag:42];

    UIImage *comment = [UIImage imageNamed:@"Checkmark-hvid"];
    UIImage *imageRef = [UIImage imageNamed:@"Checkmark-hvid"];
    UIImageView *commentView = [[UIImageView alloc] initWithImage: comment];
    UIImageView *imageRefView = [[UIImageView alloc] initWithImage: imageRef];
    commentView.frame = CGRectMake(625, 5, 30, 30);
    imageRefView.frame = CGRectMake(515, 5, 30, 30);
    commentView.tag = 98;
    imageRefView.tag = 99;

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    boolean_t didGetStates = [defaults boolForKey:@"didGetStates"];

    MBFancyObject *object = _objects[indexPath.row];
    if (didGetStates) {

        // State
        NSDictionary *dic = [tableData objectAtIndex:indexPath.row];
        if (object.beingEdited == -1) {
            int selectedState = [[dic valueForKey:@"State"] intValue];
            object.selectedIndex = selectedState;
        }

        // Comment & ImageRef
        int comment = [[dic valueForKey:@"Comment"] intValue];
        int imageRef = [[dic valueForKey:@"Foto"] intValue];
        if (comment == 0) {
            [cell.contentView addSubview:commentView];
        }
        else {
            [[cell.contentView viewWithTag:98]removeFromSuperview];
        }
        if (imageRef == 0) {
            [cell.contentView addSubview:imageRefView];
        }
        else {
            [[cell.contentView viewWithTag:99]removeFromSuperview];
        }

    }
    cell.textLabel.text = object.title;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    segmentedControl.selectedSegmentIndex = object.selectedIndex;
    object.currentIndexRow = indexPath.row;
    cell.backgroundColor = [UIColor clearColor];
    cell.textLabel.textColor = [UIColor whiteColor];

    return cell;
}

- (IBAction)allOK:(id)sender {
    for (MBFancyObject *object in _objects) {
        object.selectedIndex = 0;
        object.beingEdited = 0;
    }
    [[self tableView] reloadData];
}

所以我在第一次发表评论时没有注意到这一点,但你的问题很明显。您没有正确地将单元格从单元格池中移出队列,因此当您滚动时,每次都会创建一个全新的单元格,这会导致它们无法按您希望的方式使用您选择的索引。我很确定您的解决方案就在这里:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FancyCell"];
cell = nil;
if (!cell) {
您正在正确地将单元格出列,但随后立即将其设置为nil,这意味着它将始终通过!单元格检查并将始终创建一个新单元格。请尝试删除此行并使用已退出队列的单元格

编辑:

既然这样不行,我还想试试:
创建对方法willDisplayCell:ForRowatingIndexPath:的调用,并在该调用中检查设置的布尔标志,以查看该索引处的分段控件是否应位于索引0处。所以基本上,每当一个单元格要显示时,您都会检查它的分段控件是否应该设置为索引0,如果应该,则将其索引设置为0

因此,只有当单元格在屏幕上可见时,才会调用cellForRowAtIndexPath。您可能需要一些其他类型的初始化才能正常工作。谢谢你的意见!我是开发应用程序的新手,我想知道您是否可以告诉我应该使用哪个初始化谢谢你,阿吉安。我试图移除单元格=零;但仍不能正常工作;-你有没有其他的建议我如何解决这个问题?可能只是一个向下滚动的函数,然后在加载视图时进行备份您可以做的一件事,尽管我不确定这是一个多么好的解决方案,就是使用viewDidLoad方法初始化的SegmentedControl数组。这样,当您按下AllOk时,您只需遍历并将所有这些设置为正确的值。然后,在cellForRowAtIndexPath方法中,您只需对位于的索引使用分段控件。正如我所提到的,我对编写iOS应用程序相当陌生,因此我想知道您是否愿意帮助我。请给我一些代码,或者如果您愿意,请使用teamviewer?:-谢谢,我知道你是新来的,所以让我更清楚一点。您当前是否有viewDidLoad的实现?如果您没有,那么您所需要做的就是通过调用[super viewDidLoad]来添加它,确保您有这个!,然后在中添加您自己的代码。您了解UISegmentedControls数组的概念吗?我要问的一个问题是对象数组有多大,它是固定的还是可变的?我目前有viewDidLoad实现。我没有得到UISegmentedControls的数组:-对象数组中的对象数是可变的,但在15到25之间。再次谢谢你。