То, что я хочу, это UIView
с большим количеством UIButtons
в нем. Они размещаются и располагаются в соответствии с данными, хранящимися в NSArray
. Поскольку кнопок достаточно много, они не помещаются на экране одновременно. Пользователь должен иметь возможность уменьшать масштаб, чтобы видеть все кнопки, или увеличивать масштаб, чтобы видеть детали (метку на них) и легко выбирать их.
Я пробовал два разных подхода:
1) Я создал подкласс UIView
, поместил в него кнопки и экземпляр этого представления внутри UIScrollview
.
Эффект: я могу получить доступ ко всем кнопкам через их теги, и прокрутка и масштабирование работают нормально. НО я не могу заставить кнопки обрабатывать какие-либо события (нажать на них) ...
2) Я написал UIViewController
с точно такой же функциональностью и добавил его экземпляр в UIScrollView
.
Эффект: теперь я могу нажимать кнопки, но прокрутка и масштабирование перестали работать.
Вот соответствующий код вида:
- (UIView *)initWithArray:(NSArray *)nArray{
self = [super init];
if (self) {
int count = [nArray count];
for (int i=0; i<count; i++) {
UIButton *button = [[UIButton alloc]
initWithFrame:(__some Code to place the Button__);
button.tag = i+1;
NSString *title = [[NSString alloc] initWithFormat:__code for generating Title__];
[button setTitle:title forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize:14];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[self addSubview:button];
}
}
return self;
}
и код для матричного контроллера:
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableArray *nArray = [[NSMutableArray alloc] __some code___];
int count = [nArray count];
for (int i=0; i<count; i++) {
UIButton *button = [[UIButton alloc]
initWithFrame:CGRectMake(__some Code to place the Button__];
button.tag = i+1;
NSString *title = [[NSString alloc] initWithFormat:__code for generating Title__];
[button setTitle:title forState:UIControlStateNormal];
button.titleLabel.font = [UIFont systemFontOfSize:14];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:button];
}
}
И код для ScrollViewController
:
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 768, 970)];
[self.view addSubview:scrollView];
[scrollView setBackgroundColor:[UIColor blackColor]];
//Zooming
[scrollView setMinimumZoomScale:0.25];
[scrollView setMaximumZoomScale:4.0];
[scrollView setDelegate:self];
// constructing the view
[scrollView addSubview:chartView];
[scrollView bringSubviewToFront:chartView];
OR
[scrollView addSubview:[matrixController view]];
Как мне заставить это работать ??