在一个视图(主视图)控制器中,我有一个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];
}
答案 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;