如何从其他视图控制器更改UIButtons标签,标签颜色等?

时间:2011-10-12 20:58:22

标签: view uibutton title

在一个视图(主视图)控制器中,我有一个UIButton,可以创建一个新的UIButton。当你在新的UIButton上长按时,presentmodalviewcontroller会显示一个新的视图控制器(第二个视图)。在第二个视图中,我有一个UITableView,在第一个UITableViewCell中有一个UITextField。我想要的是,当您在UITextField中输入新的UIButtons标题时,会对其进行更改。

我所做的是在我的app委托中创建NSString。在

的第二个视图中
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

我使用过这段代码:

// Passing the TextFieldText to NewButton.
        iAppAppDelegate *AppDelegate = (iAppAppDelegate *)[[UIApplication sharedApplication] delegate];
        AppDelegate.ButtonText = [TextFieldText text];

        iAppView = [[iAppViewController alloc] initWithNibName:@"iAppViewController" bundle:nil];

        [TextFieldText addTarget:iAppView action:@selector(ApplyAllObjectsSettings) forControlEvents:UIControlEventEditingChanged];

在主视图中,我使用此操作更改了新的UIButtons标题:

- (void)ApplyAllObjectsSettings {

iAppAppDelegate *AppDelegate = (iAppAppDelegate *)[[UIApplication sharedApplication] delegate];

[NewButton setTitle:AppDelegate.ButtonText forState:UIControlStateNormal]; }

然而它不起作用。任何想法如何使这项工作或其他方式去做,真的很感激:)

提前致谢:)

更新

在我的第二个视图.h文件中,我引用了第一个视图控制器,如下所示:

@class iAppViewController;

@interface ButtonSettings : UIViewController < UIPickerViewDataSource, UIPickerViewDelegate > {

// iAppViewController
iAppViewController *iAppView;
<。>在.m文件中我导入了第一个视图控制器

#import "iAppViewController.h"

这是我用来调用动作的代码:

            [TextFieldText addTarget:iAppView action:@selector(ApplyAllObjectsSettings:) forControlEvents:UIControlEventEditingChanged];

这是第一个视图控制器中的操作:

- (void)ApplyAllObjectsSettings:(id)sender {

[NewButton setTitle:((UITextField *)sender).text forState:UIControlStateNormal];

}

1 个答案:

答案 0 :(得分:1)

您的代码无效,因为您实际上从未将新文本传递给按钮。当你说

 AppDelegate.ButtonText = [TextFieldText text];

设置为UITextFields当前文本的ButtonText(我猜是NSString),这很可能是空的。如果查看文档或其他示例,您将看到UIControlEventEditingChanged的选择器实际上接受一个参数。这是发件人,因此在您的情况下,UITextField会触发事件。使用它,您可以访问输入的文本,甚至不需要ButtonText变量。

因此更改将UITextViews目标设置为此行的行:(注意新的':')

[TextFieldText addTarget:iAppView action:@selector(ApplyAllObjectsSettings:) forControlEvents:UIControlEventEditingChanged];

然后将您的听众改为此

- (void)ApplyAllObjectsSettings:(id)sender {
    [NewButton setTitle:((UITextField *)sender).text forState:UIControlStateNormal];
}

<强>更新

正如我所说,第二个视图中的iAppView需要指向第一个视图。归档的一种方法是将它设为这样的属性(在你的ButtonSettings.h中):

@interface ButtonSettings : UIViewController < UIPickerViewDataSource, UIPickerViewDelegate > {
    ...
    iAppViewController *iAppView;
}
@property (nonatomic, strong) iAppViewController * iAppView;

不要忘记ButtonSettings.m文件中的@synthesize iAppView;。现在,当您在FIRST视图中创建ButtonSettings的实例时,您可以像这样传递引用:

myButtonSettingsInstance.iAppView = self;