iOS - 将发件人(按钮)名称传递给 addSubview

Posted

技术标签:

【中文标题】iOS - 将发件人(按钮)名称传递给 addSubview【英文标题】:iOS - passing Sender (button) name to addSubview 【发布时间】:2012-01-24 14:32:27 【问题描述】:

我有一个带有 3 个按钮的主视图。单击任何按钮都会添加一个子视图。

按钮有不同的标题并且都链接到 IBAction "switchView"

“switchView”代码如下。

- (IBAction)switchView:(id)sender
    secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil];
    [self.view addSubview:myViewController.view];

“secondView”加载正确,一切正常。

问题是我想知道哪个按钮是发件人。

我不想创建 3 个子视图,每个按钮一个。代码和XIB绝对一样>

唯一的区别是我想在第二个视图中设置一个变量(viewDidLoad 方法),具体取决于谁是发件人(点击了哪个按钮)

这可能吗?或者我需要创建 3 个子视图 - 每个按钮一个?

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

您可以使用 tag 属性识别不同的按钮。 例如用你的方法:

-(IBAction)switchView:(id)sender 
    UIButton *button = (UIButton*)sender;
    if (button.tag == 1) 
        //TODO: Code here...
     else if (button.tag == 2) 
        //TODO: Code here...
     else 
        //TODO: Code here...
    

可以通过 InterfaceBuilder 设置标签属性。 希望这会有所帮助。

【讨论】:

谢谢,但也许我没有正确解释这个问题。我知道如何在 switchView 方法中获取 Sender。问题是在那之后。 switchView 方法启动子视图。这个子视图有自己的 secondView.XIB、secondView.h 和 secondView.m 文件。在 secondView.m ((void)viewDidLoad 方法) 里面我想找出哪个按钮启动了 secondView.XIB 也许这是不可能的。一种解决方法是将 Sender 标记存储在 switchView 方法内的“全局变量”中。 (我可以将它作为密钥存储在 NSUserDefaults 中)。然后在 secondView 子视图中检索它。 好的,明白了。好吧,我的方法是在您的 - (IBAction)switchView:(id)sender; 中调用新的视图控制器;方法并将 sender.tag 作为 (id)initWith... 调用的属性传递。例如MyViewController *view = [[MyViewController alloc] initWithSenderTag:button.tag];但是,您仍然必须将 button.tag 作为全局变量存储在 MyViewController 中,以便在 - (void)viewDidLoad; 中检查它。方法。【参考方案2】:

我认为你可以通过两种方式解决:

    创建如下属性: @property (nonatomic, strong) IBOutlet UIButton *button1, *button2, *button3; 在您的视图控制器中,并将按钮链接到它们作为 XIB 上的引用插座。 给你的xib上的每个按钮一个不同的标签,并用UIButton *b=(UIButton*)sender; b.tag;询问发件人的标签,就像Markus详细发布的那样。

【讨论】:

【参考方案3】:

解决我的问题,这一切都归结为在 mainView 和 subView 之间传输数据。

在我的 mainView.h 中,我声明了一个 NSString 及其 @property

...

NSString *btnPressed;


@property(nonatomic, retain) NSString *btnPressed;

...

然后在我的 mainView.m 里面的 switchView 方法中我这样做了:

- (IBAction)switchView:(id)sender

secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil];

btnPressed = [NSString stringWithFormat:@"%i", [sender tag]];

[myViewController setBtnPressed:self.btnPressed];

[self.view addSubview:myViewController.view];

上面代码中的这一行实际上负责将数据传输到新创建的子视图:

[myViewController setBtnPressed:self.btnPressed];

然后在我的 secondView.h 中我声明完全相同的 NSString *btnPressed 及其 @property(尽管这是一个与 main 中声明的完全不同的对象)

然后在我的 secondView.m 中,我得到了我感兴趣的按下按钮的值。

- (void)viewDidLoad 
[super viewDidLoad];

int theValueOfTheButtonPressed = [self.btnPressed intValue];

这很好用。

别忘了@synthesize btnPressed;以及[btnPressed release];在 mainView.m 和 secondView.m 中

【讨论】:

以上是关于iOS - 将发件人(按钮)名称传递给 addSubview的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式将证书导入我的iOS应用程序的钥匙串,并在需要时将身份传递给服务器?

传递给报告的表单信息

将 NSString 从 View 传递给另一个

office365修改发件人显示名

如何知道是不是使用 Pushsharp 将推送通知传递到 iOS 应用程序?

如何将环境名称传递给赛普拉斯测试以加载一组环境变量?