Как манипулировать объектами после добавления их в представление - PullRequest
1 голос
/ 23 сентября 2011

Это очень элементарный вопрос об объектно-ориентированном программировании, поэтому извините заранее, если это очевидно.

У меня есть вид и я добавляю несколько объектов в это представление (как подпредставления). Я делаю это программно. Каждый объект получает индивидуальный идентификатор, так что позже я могу отличить объекты (в данном случае это позиция 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];

}

После этого у вас будет вид с несколькими объектами, прикрепленными к нему. У меня вопрос, как я могу добраться до этих объектов сейчас. Что если бы я хотел узнать имя или любую другую переменную, сохраненную в этом объекте? Например. как бы получить nameOfBook, если бы я знал, что такое stackPosition? Вот заголовок моей записной книжки:

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

4 голосов
/ 23 сентября 2011

Вы можете создать массив или словарь ваших объектов Notebook и добавить туда каждый.Затем вы можете ссылаться на них позже, получая объект массива / словаря.

Так что создайте экземпляр var для вашего массива ....

NSMutableArray *myBooks;

И затем добавьте ваши объекты в массив вваш цикл ....

[myBooks addObject:aBook];

И когда вы захотите получить его позже (используя индекс на основе 0) ....

Notebook *theBook = [myBooks objectAtindex:myIndexNumberHere];
1 голос
/ 23 сентября 2011

Поскольку вы добавляете их как подпредставление, они, вероятно, являются потомками 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];
1 голос
/ 23 сентября 2011

Создайте метод в вашем контроллере представления.

-(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 просмотров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...