【问题标题】:subviews with UIButtons - how to connect the buttons to IBActions带有 UIButtons 的子视图 - 如何将按钮连接到 IBActions
【发布时间】:2013-07-01 20:50:15
【问题描述】:

我正在尝试创建一个简单的应用程序,它使用主视图并在其中有一个较小的子视图。我需要在子视图中有按钮,但我无法让按钮工作的连接。我做了以下事情:

  • 创建一个新的基于 View 的项目,它为我提供了 ViewController.h 和 .m、MainStoryboard.storyboard 和 AppDelegate.h 和 .m。
  • 使用 NewFile 创建子视图 - Objective-C 类 - 然后将其命名为“subView1”并使其成为 UIViewController 的子类并选中 with xib 复选框。
  • 这给了我 subView1.h &.m 文件和 subView1.xib。
  • 然后我在 xib 中重新调整子视图的大小,方法是在属性检查器中将其大小设置为“FreeForm”,然后在大小检查器中指定宽度(到 280)和高度(到 300)。我还更改了背景颜色以将其与主视图区分开来。
  • 然后我将一个 UIButton 拖到 subView 中,并使用 touchupinside 将其作为 IBAction(我将其命名为“clickButton1”)连接到 subView1.h 文件。
  • 仅出于测试目的,我使用了一个简单的 NSLog 来检查我放置在 subView.m 文件中的按钮的功能,如下所示:

-(IBAction)clickButton1:(id)sender {

NSLog(@"成功了!");

}

  • 在 viewDidLoad 中的 ViewController.m 文件中,我添加了以下代码以将子视图添加到主视图:

subView1 *sv1 = [[subView1 alloc]init];

sv1.view.frame = CGRectMake(20,120,280,300);

[self.view addSubview:sv1.view];

这一切都很好,当我运行应用程序时,我得到了主视图,而子视图按预期显示。问题是当我单击位于子视图中的按钮时,它会崩溃并出现以下错误:

线程1:EXC_BAD_ACCESS(代码=1,地址=0xe00000008)

根据我的阅读,我相信这可能与我添加子视图的方式以及我使用 ARC 的事实有关。一旦添加了子视图,它就会自动释放,因此子视图中的所有按钮/连接等都会丢失。

所以我的两个问题是 1)我在这里遗漏了一些愚蠢的东西吗?有一个简单的解决方法吗?和 2) 这是创建使用带有按钮的子视图的应用程序的适当方法,还是有更好的方法?感谢任何花时间回答的人!

【问题讨论】:

    标签: uibutton connection storyboard xib subview


    【解决方案1】:

    我试图重申你所说的。

    因此,您首先创建了一个基于视图的应用程序(选中“使用情节提要”复选框),然后在情节提要中放置了一个按钮。然后,您控制并拖动按钮到"ViewController.h" 文件。如果这是正确的,你应该可以把

    NSLog(@"It Worked!");
    

    在方法实现中(至少,可以做到)

    【讨论】:

    • 您好,感谢您的回复!不,那不是我所做的。我在主视图中放置一个按钮并将其直接连接到 ViewController.h 没有问题。我所做的是创建一个名为“subView1”的新obj-C类,并使用界面生成器放置在新类的xib中的按钮中。我无法将按钮直接连接到 ViewController.h,但我可以将它连接到 subView1.h。然后我将 NSLog(@"It Worked") 放入 subView1.m 实现文件中。
    • 为什么不能将按钮直接连接到 ViewController.h?
    • 我没有将按钮放在情节提要中,因为我希望它在子视图中。这是因为我想制作多个子视图,每个子视图都有自己的 xib。在主视图中,我想在这些不同的子视图之间交换/切换,每个子视图都有一组不同的按钮。例如,考虑包含自定义键盘的主屏幕(键盘将是主视图的子视图)。然后,为了响应一个动作,我想用不同的按钮切换到一个不同的键盘。我不想要一个全新的 Viewcontroller,因为主视图的各个方面都不会改变。
    • 我明白了。我以前从未使用过任何子视图,所以我不知道。我将创建一个新项目来尝试找到解决方案。我会尽快回复您,如果找到解决方案,我将编辑我的答案。
    • 另外,据我了解,当您说所有按钮的连接都丢失时,我认为您是对的。
    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多