如何禁用基于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编辑或不
if ([mySwitch isOn]) {
myTextView.editable = NO;
[myTextView resignFirstResponder];
} else {
myTextView.editable = YES;
[myTextView becomeFirstResponder];
}
我试过了,它不起作用。 –
检查你的代码,并确保有这样的无代码:'myTextView .userInteractionEnabled = NO;' – Justlike
不存在这样的无代码。 –
您需要添加一个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;
}
这没有奏效。 –
@Tejas K一切都正确地连接在故事板上吗? –
是的,我检查了一切,看起来不错。 –
UISwitch
是UIControl
的子类除其他外,它提供了一个基于目标 - 行动的模型,用于接收关于控制状态的更新。
这意味着您可以使用-[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;
}
我做了你的建议,现在交换机的初始状态为ON和文本不能编辑,我关闭,务必关闭电源,然后我可以编辑我吨,但是当我打开开关,文本仍然是可编辑的。 –
@TejasK显示更多代码请 –
' - (IBAction为)翻转:(ID)发送方{ 如果([是myswitch ISON]){ myTextView.editable = NO; }否则{ myTextView.editable = YES; } }' –