2012-10-28 61 views
-1

我想在選擇tableviewcell之後傳遞數據的屬性。請引導me.i已經設置detailviewcontroller.DataArray是我的mutablearray in detailviewcontroller.peripheralManager是我的NSbject 。外設是我的設備。如何將數據的屬性傳遞給另一個控制器?(StoryBoard)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
    peripheralManager=[[PeripheralManager alloc]init]; 
    self.MeBle.enabled=NO; 
    device=[[NSMutableArray alloc]init]; 

} 
- (void)peripheralManagerDidConnectPeripheral:(PeripheralManager *)peripheral 
{ 
    NSLog(@"%@",peripheral.deviceName); 
    [device addObject:[NSString stringWithFormat:@" %@ ",peripheral.deviceName]];  
    // [device addObject:peripheral]; 
    [self.deviceTable reloadData]; 
} 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *[email protected]"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
    if(cell==nil) 
{ 
    cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
} 
    cell.textLabel.text=[device objectAtIndex:indexPath.row]; 
    return cell; 
} 
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //DetailViewController *detail=[self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
    // [self.navigationController pushViewController:detail animated:YES]; 

    //[self performSegueWithIdentifier:@"TableDetails" sender:[device objectAtIndex:indexPath.row]]; 

} 

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 


    if ([segue.identifier isEqualToString:@"TableDetails"]) { 

    DetailViewController *detail=segue.destinationViewController; 
    detail.dataArray=device; 


} 
} 
+1

視圖控制器是一個對象,通過調用對象的方法傳遞數據就像在任何其他情況。 –

回答

1
在prepareForSegue

你應該得到的當前選擇指標:

NSIndexPath *indexPath = [self.deviceTable indexPathForCell:sender]; 

現在,您既可以從你目前的數組傳遞眼前這個指數到目的地控制器或特定對象,它給你。

detail.idx = [indexPath row]; 

編輯:那裏,你不需要實現

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

只是

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

改成這樣:

detailViewObject.objCurrentDevice=[device objectAtIndex:[[self.deviceTable indexPathForCell:sender] row]]; 
+0

idx表示我的muyablearray對不對? – prem

+1

不,idx只是NSInteger所選元素的索引。在你的DetailViewController中定義'@property(readwrite,assign)NSInteger idx',在viewWillAppear中你將得到當前的索引。然而,我建議不要將整個數組和索引傳遞給細節控制器,最好只傳遞活動元素。在這種情況下,你可以這樣做: 'NSIndexPath * indexPath = [self.deviceTable indexPathForCell:sender]; detail.currentElem = [設備objectAtIndex:[indexPath行]];' – whiteagle

+0

http://pastebin.com/83DD02ku請檢查此..我在pastebin中添加了代碼 – prem

1

在Interface Builder中, C赫克出seague運行時屬性部分中,u可以創建多個細胞相同的風格,但不同的標識符然後由它的行的cellForRowAtIndexPath返回細胞

相關問題