ios - 带有大量 UIButtons 的 UIScrollView
<p><p>我想要的是一个 <code>UIView</code>,里面有很多 <code>UIButtons</code>。它们根据存储在 <code>NSArray</code> 中的数据进行放置和排列。因为有很多按钮,它们不能一次全部放在屏幕上。用户应该能够缩小以查看所有按钮或放大以查看详细信息(按钮上的标签)并轻松选择它们。</p>
<p>我尝试了两种不同的方法:</p>
<p>1) 我构建了一个 <code>UIView</code> 子类,将按钮放入其中,并将此 View 的实例放入 <code>UIScrollview</code>。</p>
<p>效果:我可以通过它们的标签访问所有按钮,并且滚动和缩放工作正常。但我无法获得处理任何事件的按钮(按下它们)...</p>
<p>2) 我写了一个功能完全相同的 <code>UIViewController</code> 并将它的一个实例添加到 <code>UIScrollView</code>。</p>
<p>效果:我现在可以按下按钮了,但是滚动和缩放已经停止工作了。</p>
<p>这里是 View 的相关代码:</p>
<pre><code> - (UIView *)initWithArray:(NSArray *)nArray{
self = ;
if (self) {
int count = ;
for (int i=0; i<count; i++) {
UIButton *button = [
initWithFrame:(__some Code to place the Button__);
button.tag = i+1;
NSString *title = [ initWithFormat:__code for generating Title__];
;
button.titleLabel.font = ;
;
;
}
}
return self;
</code></pre>
<p>}</p>
<p>以及 matrixController 的代码:</p>
<pre><code> - (void)viewDidLoad
{
;
NSMutableArray *nArray = [ __some code___];
int count = ;
for (int i=0; i<count; i++) {
UIButton *button = [
initWithFrame:CGRectMake(__some Code to place the Button__];
button.tag = i+1;
NSString *title = [ initWithFormat:__code for generating Title__];
;
button.titleLabel.font = ;
;
;
}
</code></pre>
<p>}</p>
<p><code>ScrollViewController</code>的代码:</p>
<pre><code> UIScrollView *scrollView = [ initWithFrame:CGRectMake(0, 0, 768, 970)];
;
];
//Zooming
;
;
;
// constructing the view
;
;
</code></pre>
<p>或</p>
<pre><code> ];
</code></pre>
<p>我怎样才能让它工作??</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>我能够获得一个包含多个按钮的 ScrollView ,可以很好地平移和缩放,而这些按钮仍在处理触摸事件:</p>
<pre><code>- (void)didTapButton:(UIButton *)button
{
NSLog(@"Button %ld", (long)button.tag);
}
- (void)viewDidLoad
{
;
UIScrollView *scrollView = [ initWithFrame:self.view.bounds];
scrollView.delegate = self;
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 3.0f, scrollView.frame.size.height * 3.0f);
scrollView.maximumZoomScale = 3.0f;
UIView *zoomView = [ initWithFrame:CGRectMake(0.0f, 0.0f, scrollView.contentSize.width, scrollView.contentSize.height)];
zoomView.backgroundColor = ;
for (NSInteger index = 0; index < 100; index++)
{
UIButton *button = ;
button.frame = CGRectMake((scrollView.frame.size.width / 2.0f) - 50.0f, 10.0f + (50.0f * (CGFloat)index), 100.0f, 30.0f);
button.tag = index;
forState:UIControlStateNormal];
;
;
}
;
;
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return ;
}
</code></pre>
<p>编辑:我在下面的评论中说过不要依赖标签,但我在这里做。 :) 这只是为了让我可以记录按钮编号,因此应该忽略该部分。</p></p>
<p style="font-size: 20px;">关于ios - 带有大量 UIButtons 的 UIScrollView,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/7497590/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/7497590/
</a>
</p>
页:
[1]