这是关于面向对象编程的一个非常基本的问题 - 如果这很明显,请提前抱歉。
我有一个视图并向该视图添加了几个对象(作为子视图)。我以编程方式执行此操作。每个对象都得到一个单独的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
答案 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];