Предложения по работе с несколькими элементами управления (кнопки UIB) - PullRequest
0 голосов
/ 22 июля 2011

Я попытаюсь погрузиться прямо в точку ...

Я хочу создать приложение, которое будет иметь более 500 элементов управления (вероятно, намного больше), и я пытаюсь найти способы, какЯ могу построить это максимально эффективно.Быстрый обзор:

Каждый элемент управления (предположим, что это UIButton, это может быть что-то еще) будет иметь прикрепленный к нему цвет.Они будут предопределенными цветами, поэтому цветовое колесо не пригодится мне для этого приложения.Итак, я сказал, черный, красный, синий ... и 500 других.Когда я нажимаю на элемент управления, он меняет цвет моего фона.Теперь я не думаю, что мне нужно создавать элемент управления вручную в IB, чтобы сочетать каждый цвет.Каким-то образом этот ручной процесс кажется архаичным и не очень эффективным.

Что бы вы, ребята, порекомендовали мне сделать?Я уверен, что некоторые из вас сталкивались с чем-то подобным, и те, у кого, вероятно, нет хорошей идеи о том, как реализовать или, по крайней мере, экспериментировать с этим.

Я открыт для предложений :)

Ответы [ 2 ]

2 голосов
/ 22 июля 2011

Что-то, что я сделал, это динамически создал сетку из 250 кнопок и поместил их в представление прокрутки во всплывающем окне. Единственным элементом, который был в xib, было представление прокрутки, встроенное в представление. И это потому, что я ленивый mofo и не хотел создавать вид прокрутки на лету. Когда вы знаете окончательный размер контента вашей сетки, передайте его в scrollview

Вы можете создать подкласс UIButton и добавить свойство UIColor или другое свойство, которое работает для вашей системы. Направьте действие UIButtons touchUp на один селектор на вашем контроллере и опросите отправителя для его связанного свойства. Таким образом, ваша красная кнопка может иметь [UIColor redColor] в качестве свойства.

Другой способ - сохранить массив на контроллере ваших цветовых объектов и установить тег кнопки в качестве индекса массива. Это означает, что вам не нужно создавать подкласс UIButton.

Предполагается, что это будет сконструировано на лету, когда вы перемещаете / толкаете память контроллера представления, не будет проблемой, поскольку вы будете выбрасывать все это при dismiss / pop.

Попробуйте это.

-(void)viewDidLoad
{
    [super viewDidLoad];

    //collect all the objects
    NSArray *array = [[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:@"shapes"];
    NSMutableArray *temp = [NSMutableArray arrayWithCapacity:[array count]];
    for(NSString *path in array)
    {
        [temp addObject:[path lastPathComponent]];
    }
    shapeArray = [[NSArray arrayWithArray:temp] retain];

    //compose into a grid of buttons
    CGRect final = CGRectZero;
    NSInteger count = 0;
    NSInteger rowsize = 6;
    for (NSString *shape in shapeArray) {

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        NSString *ipath = [[NSBundle mainBundle] pathForResource:[shape stringByDeletingPathExtension] ofType:[shape pathExtension] inDirectory:@"shapes"];
        UIImage *image = [UIImage imageWithContentsOfFile:ipath];

        [button setImage:image forState:UIControlStateNormal];
        div_t temp = div(count, rowsize);
        button.frame = CGRectMake(48 * temp.rem , 48*temp.quot, 48, 48);
        button.tag = count++;
        button.showsTouchWhenHighlighted = YES;
        [button addTarget:self action:@selector(pickShape:) forControlEvents:UIControlEventTouchUpInside];
        [scroller addSubview:button];
        final = CGRectUnion(final, button.frame);

    }
    scroller.contentSize = final.size;

}
1 голос
/ 22 июля 2011

Вы можете использовать IBOutletCollection .Его для аналогичных требований.Я постараюсь вставить пост в блоге, в котором подробно объясняется.

Некоторые связанные SO сообщения: Практическое эффективное использование IBOutletColletion

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