如何禁用基于UISwitch的UITextView的编辑?

问题描述:

我有一个UITextView,我想禁用如果UISwitch的状态设置为ON,它的“编辑”属性。如何禁用基于UISwitch的UITextView的编辑?

myTextView = [[UITextView alloc]initWithFrame:CGRectMake(20, 180, 200, 30)]; 
myTextView.backgroundColor = [UIColor whiteColor]; 
myTextView.text = @"This is a textView"; 
[self.view addSubview:myTextView]; 
mySwitch = [[UISwitch alloc]initWithFrame:CGRectMake(230, 125, 200, 30)]; 
[self.view addSubview:mySwitch]; 

我知道,我可以用检查开关的状态:

if ([mySwitch isOn]) { 
    myTextView.editable = NO; 
} else { 
    myTextView.editable = YES; 
} 

问题是,当我跑我的项目文本是不可编辑的,但是当我滑动开关的文本不能被编辑(这在上面的代码中是显而易见的)。我想知道如果我切换开关,我必须做些什么才能更改UITextView的可编辑属性。

你必须创建当开关的状态发生变化时触发开关的操作。如果使用的是故事板,从转码右键拖动(要创建一个出口),并选择action。内部的功能,你检查你的交换机现在是否开启或关闭,并根据你让你的TextView编辑或不

+0

我做了你的建议,现在交换机的初始状态为ON和文本不能编辑,我关闭,务必关闭电源,然后我可以编辑我吨,但是当我打开开关,文本仍然是可编辑的。 –

+0

@TejasK显示更多代码请 –

+0

' - (IBAction为)翻转:(ID)发送方{ 如果([是myswitch ISON]){ myTextView.editable = NO; }否则{ myTextView.editable = YES; } }' –

if ([mySwitch isOn]) { 
    myTextView.editable = NO; 
    [myTextView resignFirstResponder]; 
} else { 
    myTextView.editable = YES; 
    [myTextView becomeFirstResponder]; 
} 
+0

我试过了,它不起作用。 –

+0

检查你的代码,并确保有这样的无代码:'myTextView .userInteractionEnabled = NO;' – Justlike

+0

不存在这样的无代码。 –

您需要添加一个IBAction为,并把它挂到开关方法Value Changed

-(IBAction)toggleSwitch:(UISwitch*)sw { 
    myTextView.editable = sw.on; 
    NSLog(@"Value Changed"); 
} 

编辑:代码编程这样做,而不是通过Interface Builder的

myTextView = [[UITextView alloc]initWithFrame:CGRectMake(20, 180, 200, 30)]; 
myTextView.backgroundColor = [UIColor whiteColor]; 
myTextView.editable = NO; 
myTextView.text = @"This is a textView"; 
[self.view addSubview:myTextView]; 


mySwitch = [[UISwitch alloc]initWithFrame:CGRectMake(230, 125, 200, 30)]; 
mySwitch.on = NO; 
[mySwitch addTarget:self action:@selector(toggleSwitch:) forControlEvents:UIControlEventValueChanged]; 
[self.view addSubview:mySwitch]; 

-(void)toggleSwitch:(UISwitch*)sw { 
    myTextView.editable = sw.on; 
} 
+0

这没有奏效。 –

+0

@Tejas K一切都正确地连接在故事板上吗? –

+0

是的,我检查了一切,看起来不错。 –

UISwitchUIControl的子类除其他外,它提供了一个基于目标 - 行动的模型,用于接收关于控制状态的更新。

这意味着您可以使用-[UIControl addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents]方法都要求你的方法时,改变了开关的布尔值:您UISwitch

[yourSwitch addTarget:self action:@selector(switchToggled:) forControlEvents:UIControlEventValueChanged] 

您也可以从Interface Builder中做到这一点,通过右键单击其分配到action适当IBAction方法:

- (IBAction) switchToggled:(UISwitch*)switchControl { 
    yourTextView.editable = switchControl.on; 
}