0

尽管我是用 Objective C 编写的,但我的大部分代码仍然是用过程风格编写的。但是,现在我想做一些这种方法不起作用的事情。所以我需要一些关于如何同时处理屏幕上不确定数量的对象的建议。我确定这个问题已经解决了,我只是无法找出方法。

我有一堆游戏,我在屏幕上放两张或四张图片,然后用户与图片进行交互。当他们完成一个页面时,他们会滑动到下一个页面,然后我使用过渡将图片滑出屏幕。我可以控制图片的移动,因为在创建它们时我将它们命名self.picture_1self.picture_2. 移动方法知道它们,即使该方法没有创建它们。

现在假设我想在屏幕上显示不确定数量的图片。我不能打电话给他们self.picture_1。因为self.picture_nObjectiveC不会让你动态创建变量名。但是我仍然需要以未创建它们的方法移动它们。

我可以使用两种技术使它工作,这两种技术似乎都不理想。首先,我查看屏幕上的所有对象,然后对我想要定位的对象做一些事情。注意:图片在按钮中。

for ( id subview in self.parentView.subviews ) {
        if ( [subview isKindOfClass:[UIButton class]] ) {
            UIButton *pictureButton = subview;
            for (NSUInteger i=0; i<self.totalItems; i++) {
                NSUInteger row = (i % 2) + 1;
                NSUInteger column = (i/2) + 1;
                NSString *pictureTitle = [NSString stringWithFormat:@"pictureR%iC%i", row, column];
                if ( [pictureButton.titleLabel.text isEqualToString:pictureTitle] ) [pictureButton removeFromSuperview];
            }
        }
}

这适用于将它们从视图中删除,但是当我尝试让图片滑出屏幕时会变得很麻烦。

第二种方法是创建一个数组来保存创建时的图片对象。我一直在玩这样的东西。

self.gridImages = [NSMutableArray arrayWithCapacity:4];
        for (NSUInteger i = 0; i < itemsOnScreen; i++) {
            Word *word = [wordListArray objectAtIndex:i];
            self.gridImages[i] = word.image;
}

然后用我循环遍历数组的图片做一些事情。

for (NSUInteger i = 0; i < itemsOnScreen; i++) {
    Picture *picture = self.gridImages[i];
    // do something with picture
}

这两种方法似乎都不“正确”,所以我想知道是否有一种首选方法来操作屏幕上不确定数量的对象?

4

1 回答 1

0

@Hot Licks,这行得通,所以我把你的答案变成了答案。

我让它为复选框工作。它们由主视图控制器创建,并传入一个标签。我使用从 1000 开始的标签用于复选框,从 2000 开始用于图片等。就在我将复选框放在屏幕上之前,我为它分配了标签。

[self.checkBox setTag:checkBoxTag];

你也可以使用:self.checkbox.tag = checkBoxTag;

当需要删除复选框时,我会遍历所有标签,从 1000 开始一直到屏幕上的项目总数。我的警告最多为 11,所以我需要将计数器转换为 NSInteger。

- (void)removeCheckboxes {
    for (NSUInteger i = 0; i < self.totalItems; i++) {
        NSInteger tagNumber = 1000 + (NSInteger)i;
        [ [self.parentView viewWithTag:tagNumber] removeFromSuperview];
    }   

}
于 2013-05-16T18:53:24.247 回答