【问题标题】:Storyboard, drag link to an IBAction from a container view to the parent故事板,将 IBAction 的链接从容器视图拖到父视图
【发布时间】:2014-11-20 13:04:30
【问题描述】:

这是一个名为 Club 的微不足道的 VC

俱乐部有一个功能:

@implementation Club
-(IBAction)clickMe
    {
    NSLog(@"Whoa!");
    }
@end

现在关于 ButtonA。显然,在 Storyboard 中您可以将从 ButtonA 拖到“Club”中的“clickMe”函数中。

现在。关于ButtonB。

有什么方法可以在 Storyboard 中从 ButtonB 拖动到“Club”中的“clickMe”?

也许使用神秘的“物体”物体,或者......??

请注意,显然,您可以为小视图创建一个类,并拥有一个功能:

@implementation SmallViewOnRight
-(IBAction)sameAsClickMe
    {
    [(Club*)self.parentViewController clickMe];
    }
@end

然后,您可以从 ButtonB 拖动到 sameAsClickMe。但这太麻烦了。

请注意,使用这样的容器视图来处理主视图的不同“区域”是很正常的(特别是当您有东西滑动等时,以及当您有很多东西“彼此重叠”时) )。使用容器视图将“部分”移动到主视图之外非常方便。但这完全是令人讨厌的“忽略”点击次数。

Storyboard 中是否有一种晦涩难懂的方法来执行此操作?干杯!

只是 FTR,仅限 iOS7+,没有更早的版本

注意 - 朝着“另一个方向”前进是经过充分探索并且很容易做到的。

【问题讨论】:

  • 除非您也将View Controller 设置为Club,否则我认为这是不可能的。通过代码,您可以使用您的 Club 引用并将要从 buttonB 调用的操作设置为 Club 的操作之一(如果您需要一些 var/let 来更新 UI 或详细说明)
  • 根据我的经验,容器视图的要点是拥有一个独立的视图控制器来处理自己,这样您就不会最终得到一个巨大的、臃肿的 UIViewController 类。我处理这种情况的方法是为第二个 ViewController 制定一个协议,并将其委托设置为 ClubViewController 类。然后你可以照你说的做,拥有sameAsClickMe方法,让它通过委托调用ClubViewController的clickMe方法。
  • 大家好!奇怪的是,您不能只将它拖到情节提要中,因为 它们都是实例化的,所以没有理由不能。我想知道神秘的“物体”物体?这可能是相关的吗? SFeuer,在我的长段(“注意...”)中,我解释了用例。你知道,如果不使用容器视图作为小的“子”区域,几乎不可能制作非常复杂的(尤其是幻灯片)屏幕。一个谜!
  • 顺便说一句,伙计们,我认为让容器视图使用委托有点在概念上很奇怪!!!就好像(比如说)只是一个按钮,视图不只是拥有它,视图必须通过成为按钮委托的机制,才能使用它!容器视图是视图“完全的一部分”——实际上,它与“一个非常复杂的控件”没有什么不同。

标签: ios uistoryboard uicontainerview


【解决方案1】:

不,你不能这样做,但你可以使用委托来实现这种行为。

在 SecondViewController.h 中:

@protocol SecondViewControllerDelegate <NSObject>
-(void)clickMe;
@end

@interface SecondViewController.h: UIViewController

@property (weak, nonatomic) id <SecondViewControllerDelegate> delegate;

@end

在 SecondViewController.m 中:

@implementation SecondViewController 

- (IBAction) buttonBClicked:(id)sender {
 if ([self.delegate respondsToSelector:@selector(clickMe)] {
       [self.delegate performSelector:@selector(clickMe)];
    }
}

@end

在 ClubViewController.m 中:

#import "SecondViewController.h"
@interface ClubViewController () <SecondViewControllerDelegate>
@end

@implementation ClubViewController.m

// make yourself a delegate of SecondViewController somewhere in your code. For example, in prepareForSegue. 

-(void)clickMe {
   NSLog (@"Clicked");
}

@end

编辑: 尝试放松赛格! 我已经发布了关于如何使用它们的答案here。但请跳过第 4 步。

【讨论】:

  • 委托使用的一个很好的例子!请注意,正如我所说,您会很简单地 [self.parentViewController clickMe];在代码中,在这种情况下。
  • 我错过了:)!但它有效吗?除了关闭之外,我从未尝试向 parentViewController 发送消息。
  • 当然:)。或者我可以在检查它是否响应调用后执行选择器。
  • 很酷的文章!我在考虑 Unwind Segue,因为您可以将 UIButton 的操作与 Unwind Segue 操作方法挂钩
  • 我个人不建议让 container 查看协议/委托 .. 就像我上面所说的,它已经具有非常明确的父子关系。无论如何,我知道如何使用代表 :) 问题是有没有办法建立链接,拖入情节提要!我想知道!!!!!!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多