【问题标题】:Programmatically access subview of UIScrollView以编程方式访问 UIScrollView 的子视图
【发布时间】:2014-12-15 21:22:03
【问题描述】:

在视图控制器中,我添加了一个 UIScrollView,然后向滚动条添加了一个 UIView。我通过 Storyboard 在该 UIView 中放置了几个按钮,我想以编程方式有条件地添加其他按钮。

我已尝试将以下引用链接到 Storyboard 中的 UIScrollView 和 UIView,但任一链接都会在加载此视图控制器时导致应用崩溃:

@property (strong, nonatomic) IBOutlet UIScrollView *scroll;
@property (strong, nonatomic) IBOutlet UIView *v;

由于我无法在 Storyboard 中创建引用出口,如何创建对 UIView 的引用以便添加按钮?

当应用程序崩溃时,主方法返回行以绿色突出显示,并显示消息 Thread1: signal SIGABRT 在输出窗口中,根据链接的上述哪个属性,我看到:

2014-10-20 12:42:26.411 Testbed[2451:283149] *** 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不是键值编码-符合按键滚动。'

或:

2014-10-20 12:52:06.986 MTH[2578:299917] *** 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不是键值编码-符合密钥 v.'

【问题讨论】:

  • 分享您遇到的错误
  • 不要使用故事板 ;) 为胜利而编程!

标签: ios objective-c xcode uiview uiscrollview


【解决方案1】:

像这样添加子视图

[self.v addSubview:button];

像这样访问子视图

UIScrollView *scrollview = (UIScrollView *) _scroll;
UIView *View = (UIView *) scrollview.subviews[0];

【讨论】:

    【解决方案2】:

    我找到了答案。在我的视图控制器的自定义类的 ViewDidLoad 方法中,我使用了以下内容:

    NSArray *sv = self.view.subviews;
    UIScrollView *sc = sv[0];
    sv = sc.subviews;
    UIView *v = sv[0];
    

    我逐步执行以确认 ScrollView 是视图的第一个子视图,并确认 UIView 是 ScrollView 的第一个子视图。

    如果我需要在 ViewDidLoad 方法之外访问这个视图,我会在头文件中创建变量。

    【讨论】:

      【解决方案3】:

      如果您想以编程方式将子视图添加到视图中,您需要实例化它并将其添加到子视图中,如下所示:

      UIButton *button = [UIButton new];
      [button setTitle:@"BUTTON!" forControlState:UIControlStateNormal];
      [button sizeToFit];
      
      // Do any additional setup for your button here, for example setting the frame.
      [self.v addSubview:button];
      

      但是,如果这实际上是您想要从您的问题中做的事情,我无法确定。因此,如果我发现您的尝试有误,请告诉我!

      编辑 1

      抱歉,我误读了这个问题。查看您提供的错误,您似乎没有在界面构建器的右侧窗格中将视图控制器设置为您的自定义子类。

      发生此错误的原因可能是虽然您已链接 IBOutlets,但运行时尝试初始化 UIViewController 的不正确子类,因此找不到所需的属性。

      【讨论】:

      • 子视图已经存在。在 View Controller 上,我有: View -> ScrollView -> View -> 按钮和条件按钮 我需要的是指向最后一个视图的链接,以便我可以添加其他按钮。
      • 查看更新的答案,试一试,如果有帮助,请告诉我。
      【解决方案4】:

      在您的故事板中,您的视图控制器可能不会从您的自定义视图控制器继承,因此找不到 iboutlet(这就是您无法创建链接的原因)。 顺便说一句:iboutlet 永远不应该强而弱,因为它们已经被控制器保留的视图保留。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-22
        • 2010-10-14
        • 1970-01-01
        相关资源
        最近更新 更多