0

NSArrayのすべてのアイテムにUIButtonを作成するiPhoneアプリを作成しようとしています。したがって、基本的に、配列に20個のアイテムがある場合、20個のUIButtonが作成され、それぞれに、配列内のそれぞれのアイテムに何らかの方法で接続する識別子があります。配列に別のアイテムを追加すると、20個ではなく21個のボタンが作成されます。ストーリーボードとInterface Builderを使用してこれを行う方法はありますか?

また、作成されたUIButtonをページ付けする方法はありますか?画面に6つのボタンがあり、次の6にスクロールするオプションが必要です。したがって、配列に20個のアイテムがある場合、最初の3ページに6個、最後のページに2個のScrollViewが作成されます。

よろしくお願いします!視覚的な理由から、このためにTableViewの使用を避けようとしています。これを達成するためのより簡単な方法があれば、私に知らせてください!

4

1 に答える 1

1

私の意見では、これは InterfaceBuilder を使用すると簡単ではありません。コードを使用して作成することをお勧めします。ページネーションには、ページング UIScrollView を使用する必要があります。

#define BUTTON_WIDTH 40
#define BUTTON_HEIGHT 30
#define BUTTON_PADDING 10
#define BUTTONS_PER_PAGE 6
#define PAGE_WIDTH ((BUTTON_WIDTH + BUTTON_PADDING) * BUTTONS_PER_PAGE)
#define MAGIC_BUTTON_TAG_OFFSET 6238 /* Maybe somebody already uses views with tags like 0, 1, 2, 3...)

// in an init... method:

UIScrollView *sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 80, 320, 320)];
sv.contentSize = CGSizeMake(PAGE_WIDTH, sv.frame.size.height);
sv.pagingEnabled = YES;
[self.view addSubview:sv]; // assuming a view controller

NSArray *a = [NSArray arrayWithObjects:...]; // whatever

for (int i = 0; i < a.count; i++)
{
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(i * (BUTTON_WIDTH + BUTTON_PADDING), 0, BUTTON_WIDTH, BUTTON_HEIGHT);
    btn.tag = i + MAGIC_BUTTON_TAG_OFFSET; // to relate to the array index
    [btn setTitle:[NSString stringWithFormat:@"Button No. %d", i] forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [sv addSubview:btn];
}

- (void)buttonPressed:(UIButton *)btn
{
    int index = btn.tag - MAGIC_BUTTON_TAG_OFFSET;
    id object = [a objectAtIndex:index];

    [self doSomethingWithObject:object];
}

お役に立てれば。

于 2012-08-07T03:30:03.230 に答える