0

BluetoothLEアプリを開発しています。私のViewController場合、アクションボタン(検索)があります。アクションボタンを押すと、使用可能なBLEデバイス名のリストがテーブルビューに表示され、正常に機能します。ここで、Bluetooth Low Energyデバイスでサポートされているサービスを取得するため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];
       }
 }
4

1 に答える 1

1

選択した(ユーザーがタップした)テーブルビューセルに必要なものは、デバイス名が「デバイス」という名前の可変配列から取得されたものだけだと思います。

「populating」が、新しくロードされたView Controller、「TableDetails」の宛先View Controllerにセグエを許可することを意味する場合、デバイス名を認識します。

  • デバイス名を送信者に渡します:performSegueWithIdentifier:senderの引数:
  • 別のメソッドですでに行っているように、デバイス名はcell.textLabel.textまたは[device objectAtIndex:indexPath.row]から取得できます。
  • たとえば、新しくロードされたビューコントローラの名前のクラス名がDeviceDetailViewControllerであるとします。
  • @property(nonatomic、strong)NSString*deviceName;を追加します。DeviceDetailViewController

  • Override -prepareForSegue:sender:セグエを実行し、デバイス名を渡すビューコントローラーのメソッドは、次のようにセグエの宛先ビューコントローラーに送信者引数として送信されます。

  • destinationViewController @propertyには、ストーリーボードデザインで適切に構成されている場合、ストーリーボードによってDeviceDetailViewControllerのインスタンスが新しくロードされます。たとえば、セグエの宛先ビューコントローラーに新しいクラス名を付けるなどです。

  • setDeviceName:メソッドは@property(...)deviceNameの宣言によって魔法のように利用可能です。最新バージョンのXcodeを使用している場合の宣言

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を使用して好きなことを行うことができます。

于 2012-10-18T05:40:08.427 に答える