ios - IOS 14 XCode Beta 4 中的 UISwitch 行为发生了变化
问题描述
有没有人注意到在 Beta 4 中添加到 UISwitch 的更改,如果你设置一个开关标签,由于某种原因它不尊重它?我以编程方式将一个开关添加到 TableView 单元格的附件视图中,一旦选择了该单元格,我就访问该开关以获取它的标签,以了解它是哪个开关以及已更改的状态。
以下是代码示例:
if (_showSwitch) {
if (cell.accessoryView == nil) {
cell.selectionStyle = UITableViewCellSelectionStyleNone;
switchview = [[UISwitch alloc]initWithFrame:CGRectZero];
switchview.tag = indexPath.row;
cell.accessoryView = switchview;
[switchview addTarget:self action:@selector(switchChanged:)
forControlEvents:UIControlEventValueChanged];
cell.backgroundColor = UIColor.systemGray2Color;
}
NSArray *strArray = [_tableDataSource[indexPath.row] componentsSeparatedByString:@"/"];
_row = indexPath.row;
_cellLabel = strArray[0];
cell.textLabel.text = _cellLabel;
_cellArray = [_cellArray arrayByAddingObject:(NSString *)_cellLabel];
if (_level >= 1) {
_deviceID = strArray[1];
_deviceArray = [_deviceArray arrayByAddingObject:_deviceID];
_lowcaseDeviceID = _deviceID = _deviceID.lowercaseString;
dictLookup = _statusDict[_lowcaseDeviceID];
if (_row >= 1) {
mycmdString = [mycmdString stringByAppendingString:@","];
}
mycmdString = [mycmdString stringByAppendingString:_deviceID];
UISwitch *switchView = (UISwitch *)cell.accessoryView;
[switchView setOn:NO animated:NO];
if ([dictLookup isEqualToString:@"ON"]) {
cell.textLabel.textColor = UIColor.systemGreenColor;
[switchView setOn:YES animated:YES];
}
_callForStatus = TRUE;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
cell.accessoryView = nil;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
- (IBAction)ControlView:(UISwitch *)sender {
ControlViewController *flController = [[ControlViewController alloc]
initWithNibName:@"ControlViewController" bundle:nil];
(flController.navigationItem).title = [NSString stringWithFormat:@"%@ - %@", _deviceName, _device];
_level = _level += 1;
flController.deviceID = _device;
flController.deviceName = _deviceName;
flController.deviceState = @"OFF";
if ((sender.isOn) == YES) {
flController.deviceState = @"ON";
}
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {
[self presentViewController:flController animated:YES completion:nil];
});
}
- (void)switchChanged:(UISwitch *)sender {
bool mode;
UISwitch *switchControl = sender;
if (switchControl.isOn == YES) {
[switchControl setOn:YES animated:YES];
mode = TRUE;
[General playSound:@"Button Up.mp3"];
} else {
[switchControl setOn:NO animated:NO];
mode = FALSE;
[General playSound:@"Button Down.mp3"];
}
sender.highlighted = YES;
_callForStatus = TRUE;
[self executeSwitchAtRow:switchControl.tag forMode:mode];
// if (_level >= 1) [self startStepperTimer];
}
- (void)executeSwitchAtRow:(NSInteger)row forMode:(BOOL)onoff {
NSString *mode = @"OFF";
if (onoff) {
mode = @"ON";
}
NSString *device = _deviceArray[row];
Debug_1(@"Send Switch Change for device %@ %@",device,mode);
NSString *execCommand = [NSString stringWithFormat:@"device %@ %@", mode, device];
[[NSNotificationCenter defaultCenter] postNotificationName:@"sendMessageFromExternal" object:self
userInfo:@{ @"cmd": execCommand }];
if (_level >= 1) [self startStepperTimer];
}
...
解决方案
推荐阅读
- bash - 使用 bash 脚本通读文件并检查确切位置
- python - HTTPS - 无法获取索引基本 URL https://pypi.python.org/simple/
- python - 从 Pandas DataFrames 中的表列表中返回具有特定“列标题”的表
- flutter - 在表单中使用 TypeAheadFormField - Flutter
- .net - .net web api中的Graphql请求返回非预期数据
- snowflake-cloud-data-platform - 雪花返回浮点数而不是整数
- reactjs - Shopify Delivery 应用程序测试和集成
- c++ - Ceres-Solver:有没有办法让 Jet 在成本函数中翻倍?
- asp.net-core - ASP.NET Core DDD Update domain model using the request ViewModel
- java - 将 SQL 查询结果中的普通列表转换为嵌套列表