我有一个带有开关按钮的视图控制器(firstViewController)。切换按钮应显示/隐藏secondViewController中的文本字段。我该怎么办?
答案 0 :(得分:1)
您的应用应根据Model-View-Controller设计模式进行结构化。你需要这样做:
BOOL hideText
变量添加到模型类model.hideText
设置为交换机event handler model.hideText
处理程序中的viewWillAppear
model.hideText
,则隐藏文本字段;否则,显示它答案 1 :(得分:0)
非常简单。您只需使用delegate
设计模式。通过此链接delegation。
在你的代码中你必须做这样的事情。我想你的开关在secondViewCOntroller中,你必须在FirstViewController的SwitchON上隐藏textField
步骤1)在第二个View控制器中创建协议,并创建该委托的属性。在switchButtonPressed方法中调用交换机的值,并在那里调用该委托方法。
@protocol secondViewControllerDelegate <NSObject>
-(void)switchButtonPressedOn:(BOOL)switchOn;
@end
@interface secondViewController : UIViewController
@property (weak, nonatomic) IBOutlet UISwitch *switchOutlet;
@property(weak,nonatomic)id<secondViewControllerDelegate>delegate;
- (IBAction)switchButtonPressed:(id)sender;
@end
在switchButtonPressed中,
- (IBAction)switchButtonPressed:(id)sender {
if(self.switchOutlet.on==YES)
[self.delegate switchButtonPressedOn:YES];
}
第2步) 在FirstViewController中,
#import "swiftViewController.h"
@interface ViewController : UIViewController<secondViewControllerDelegate,UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *textField;
@property BOOL mySwitchState;
@end
步骤3)在delegate=self
方法
prepareForSegue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
secondViewController *destViewController = segue.destinationViewController;
destViewController.delegate = self;
}
-(void)switchButtonPressedOn:(BOOL)switchOn{
NSLog(@"Method Called");
if (switchOn==YES) {
self.textField.hidden=YES;
}else{
self.textField.hidden=NO;
}
}
如果你想在nextViewController中隐藏textField,那么将switchState传递给prepareForSegueMethod
中的nextViewController,
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
thirdViewController *thirdVC=segue.destinationViewController;
if (self.switchOutlet.on==YES) {
thirdVC.isSomethingEnabled=YES;
}
}
并在nextViewController的viewDidLoad
中隐藏你的textField。
if (self.isSomethingEnabled==YES) {
self.textField.hidden=YES;
}
完美的工作。这是iOS中非常重要的概念。点击上面的链接。