菜鸟教程小白 发表于 2022-12-13 09:08:24

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&lt;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&lt;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(@&#34;Button %ld&#34;, (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 &lt; 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]
查看完整版本: ios - 带有大量 UIButtons 的 UIScrollView