2011-09-23 84 views
1

这是一个关于面向对象编程的非常基本的问题 - 如果这很明显,那么提前很抱歉。如何在将对象添加到视图后操作对象

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

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 

回答

4

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

所以创建实例VAR为您的阵列....

NSMutableArray *myBooks; 

,然后添加你的对象为在循环数组....

[myBooks addObject:aBook]; 

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

Notebook *theBook = [myBooks objectAtindex:myIndexNumberHere]; 
+0

噢 - 记得初始化数组中的init方法,和的dealloc它。 – Simon

+0

谢谢,但我仍然有同样的问题(我认为)。假设我将所有笔记本放在myBooks中。我仍然需要将它们作为子视图添加到我的视图中(这样我才能在屏幕上显示某些内容)。所以他们现在可以在数组中找到并作为我的视图的子视图。或者我错了? –

+0

该数组将存储对您视图中的对象的引用 - 因此您仍然可以将它们添加到您的视图中。 – Simon

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意见

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];