【问题标题】:scroll view + segment button +iOS滚动视图+分段按钮+iOS
【发布时间】:2012-11-27 10:22:12
【问题描述】:

我有 2 个滚动视图。我在第一个滚动视图上放了很多按钮。当我在第一个滚动视图中单击一个按钮时,相关按钮会填充第二个滚动视图。

我希望第一个滚动视图中的按钮具有段控制的效果。即,当单击一个按钮时,其图像会变暗,并且在单击第一个滚动视图中的其他按钮之前无法再次单击。

如何做到这一点?任何示例代码表示赞赏!谢谢!

【问题讨论】:

    标签: ios button uiscrollview scrollview uisegmentedcontrol


    【解决方案1】:

    您不能只跟踪上次单击的按钮,然后将该按钮重置为活动状态,然后将您现在单击的按钮设置为非活动状态吗?只需创建一个属性 lastClicked,然后执行以下操作:

    -(IBAction) buttonClicked:(UIButton *)sender {
        [self.lastClicked setUserInteractionEnabled:YES];
        [self.lastClicked setImage:[UIImage imageNamed:@"enabledImage"] forState:UIControlStateNormal];
        [sender setUserInteractionEnabled:NO];
        [sender setImage:[UIImage imageNamed:@"disabledImage"] forState:UIControlStateNormal];
        self.lastClicked = sender;      
    }
    

    【讨论】:

      【解决方案2】:

      尝试在滚动视图中添加分段控件。

      - (void)viewDidLoad
      {
          [super viewDidLoad];
      
          journals = [[NSMutableArray alloc]init];
      
          self.tableView.dataSource = self;
          self.tableView.delegate = self;
      
          UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 49, 320, 29)];
          self.segmentedControl.frame = CGRectMake(0, 0, 640, 29);
      
          scrollView.contentSize = CGSizeMake(self.segmentedControl.frame.size.width, self.segmentedControl.frame.size.height -1);
          scrollView.showsHorizontalScrollIndicator = NO;
      
          self.segmentedControl.selectedSegmentIndex = 0;
      
          [scrollView addSubview:self.segmentedControl];
          [self.view addSubview:scrollView];
      
          [self fillJournals];
      
          // Do any additional setup after loading the view, typically from a nib.
      }
      

      【讨论】:

      • 请注意 link-only answers 是不鼓励的,所以答案应该是寻找解决方案的终点(与另一个中途停留的参考相比,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
      • 会重视那个 kleopatra。
      【解决方案3】:

      超级简单,非常丑陋,但它确实有效。您可以通过检查图像和按钮的交互状态来进一步优化它,这样您就不会在每次循环时都设置图像。

      -(void) buttonClicked:(UIButton *)sender {
          for (UIButton *btn in self.scrollView.subviews) {
              if ([sender isKindOfClass:[UIButton class]]) {
      
                  if (btn == sender) {
                      [btn setUserInteractionEnabled:NO];
                      [btn setImage:[UIImage imageNamed:@"disabledImage"] forState:UIControlStateNormal];
                  } else {
                      [btn setUserInteractionEnabled:YES];
                      [btn setImage:[UIImage imageNamed:@"enabledImage"] forState:UIControlStateNormal];
                  }
              }
      
          }
      }
      

      【讨论】:

      • 非常感谢 CodaFi 的超级及时和简单的回复!我曾认为我必须使用按钮标签。一旦我测试它会回复你。
      • 亲爱的 CodaFi,我将按钮从库中拖动并添加到第一个滚动视图上,而不是通过代码。当我使用以下'-(IBAction)btnClick:(id)sender { for (UIButton *btn in self.scrollView.subviews) { if (btn == sender) { [btn setUserInteractionEnabled:NO]; [btn setImage:[UIImage imageNamed:@"disabledImage"] forState:UIControlStateNormal]; } else { [btn setUserInteractionEnabled:YES]; [btn setImage:[UIImage imageNamed:@"enabledImage"] forState:UIControlStateNormal]; } } }
      • 以下错误:2012-12-10 10:26:37.028 Autoscroll[457:b603] -[UIImageView setImage:forState:]:无法识别的选择器发送到实例 0x4b7a130 2012-12-10 10:26 :37.032 Autoscroll [457:b603] ***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[UIImageView setImage:forState:]:无法识别的选择器发送到实例0x4b7a130'***第一次抛出调用堆栈:( 0 CoreFoundation 0x00dce5a9 __exceptionPreprocess + 185 1 libobjc.A.dylib 0x00f22313 objc_exception_throw + 44
      • 您似乎也在向视图中添加图像。您需要有条件地检查每个按钮的类。
      • 感谢您的进一步解释。我想使用图片按钮。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2017-02-13
      • 2020-10-24
      • 2016-05-06
      相关资源
      最近更新 更多