我正在开发蓝牙LE应用程序。在我的ViewController
中,我有一个操作按钮(搜索),如果我按下一个操作按钮,表格视图中显示的可用BLE设备名称列表工作正常。现在我想访问TableViewCell
(如果我点击设备名称,支持服务在另一个ViewController
中填充),以获得蓝牙低功耗设备支持的服务。我的问题是如何访问TableViewCell
中的设备名称(填充)以及如何从BLE获取支持的服务(例如,警报,TxPwr,电池)。如果我单击一个单元格(设备名称),那么我想知道支持的服务列表。给我一个主意。设备是我的可变数组。我的问题是如何将TableViewCell
填充到我的另一个ViewController
...
-(void)viewDidLoad
{
[super viewDidLoad];
peripheralManager=[[PeripheralManager alloc]init];
self.label.text = @""
[self.deviceTable reloadData];
device=[[NSMutableArray alloc]init];
}
的TableView
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [device count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier=@"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell==nil)
{
cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text=[device objectAtIndex:indexPath.row];
cell.accessoryType=UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self performSegueWithIdentifier:@"TableDetails" sender:[device objectAtIndex:indexPath.row]];
//NSString *deviceName = [device objectAtIndex:indexPath.row];
//secondViewController *svController=[[secondViewController alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];
//svController.deviceName=deviceName;
//[self.navigationController pushViewController:svController animated:YES];
// svController=nil;
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"TableDetails"]) {
[segue.destinationViewController setDeviceName:(NSString *)sender];
}
}
答案 0 :(得分:1)
我认为您从所选(用户点击的)表格视图单元格中所需要/想要的是设备名称来自名为“device”的可变数组
如果'populating'意味着让新加载的视图控制器'TableDetails'的目标视图控制器知道设备名称,
添加@property(非原子,强)NSString * deviceName;到 DeviceDetailViewController
覆盖--prepareForSegue:发送方:视图控制器执行segue的方法并传递设备名称,以这种方式作为发送方参数传递给segue的目标视图控制器:
如果您在Storyboard设计中正确配置了目标视图控制器
<强> DeviceDetailViewController 强>
@interface DeviceDetailViewController : UITableViewController
@property (nonatomic, strong) NSString *deviceName;
@end
<强>的TableView 强>
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"TableDetails"]) {
[segue.destinationViewController setDeviceName:(NSString *)sender];
}
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath];
[self performSegueWithIdentifier:@"TableDetails" sender:[device objectAtIndex:indexPath.row]];
}
现在,您可以使用类实现中DeviceDetailViewController的deviceName @property执行任何操作。