Xcode 6 - 如何在另一个viewcontroller中的af开关中隐藏一个viewcontroller中的textfield

时间:2015-05-24 09:48:28

标签: ios objective-c

我有一个带有开关按钮的视图控制器(firstViewController)。切换按钮应显示/隐藏secondViewController中的文本字段。我该怎么办?

2 个答案:

答案 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中非常重要的概念。点击上面的链接。