将对象添加到视图后如何操作对象

时间:2011-09-23 10:39:23

标签: iphone objective-c cocoa-touch object

这是关于面向对象编程的一个非常基本的问题 - 如果这很明显,请提前抱歉。

我有一个视图并向该视图添加了几个对象(作为子视图)。我以编程方式执行此操作。每个对象都得到一个单独的ID,以便我以后可以分开对象(在这种情况下它是int位置)。这是我的代码:

    for (int i=0; i < [directories count]; i++) {

    NSLog(@"%i", i);

    Notebook *aBook = [[Notebook alloc] initWithName:aName withPosition:i];
    [self.view addSubview:aBook];
    [aBook release];
    [aName release];

}

在此之后,有一个视图附加了几个对象。我的问题是我现在如何能够获得这些对象。如果我想查找此对象中保存的名称或任何其他变量,该怎么办?例如。如果我知道stackPosition是什么,我怎么能得到nameOfBook?这是我的对象笔记本的标题:

 #import <Foundation/Foundation.h>

@interface Notebook : UIView

{
    NSString *nameOfBook;
    int stackPosition;
    int bookWidth;
    int bookHeight;
    int xPosition;
    int yPosition;

}

@property (nonatomic, retain) NSString *nameOfBook;
@property int stackPosition;
@property int bookWidth, bookHeight, xPosition, yPosition;

-(id)initWithName:(NSString *)name withPosition:(int)position;
-(void)putOnScreen;

@end

3 个答案:

答案 0 :(得分:4)

您可以创建Notebook对象的数组或字典,并将每个对象添加到其中。然后你可以通过获取数组/字典对象来引用它们。

所以为你的数组创建实例var ....

NSMutableArray *myBooks;

然后将您的对象添加到循环中的数组中....

[myBooks addObject:aBook];

当你想稍后检索它时(使用基于0的索引)....

Notebook *theBook = [myBooks objectAtindex:myIndexNumberHere];

答案 1 :(得分:1)

在视图控制器中创建方法。

-(UIView*)getNotevookForName:(NSString*)name{
    for (UIView *v in self.view.subviews)
        if ([v isKindOfClass:Notebook.class] && [[(Notebook*)v nameOfBook] isEqualToString:name])
            return v;
    return nil;

}

如果您有很多Notebook次观看

,这种方法效率不会太高

答案 2 :(得分:1)

由于您将它们添加为子视图,因此它们可能是UIView的后代。为什么不这样使用tag属性:

int kBookTagIndex = 10;
for (int i=0; i < [directories count]; i++) {
    NSLog(@"%i", i);
    Notebook *aBook = [[Notebook alloc] initWithName:aName withPosition:i];
    [aBook setTag:i+kBookTagIndex];
    [self.view addSubview:aBook];
    [aBook release];
    [aName release];

}

稍后检索:

int stackIndex = 4;
Notebook *aBook = [self.view viewForTag:stackIndex+kBookTagIndex];