2010-11-21 55 views
0

試圖顯示從已選擇的的tableView細胞我的酥料餅UIPopover問題

UITableViewCell *cell; 
UserProfile *switchV = [[UserProfile alloc] initWithNibName:nil bundle:nil]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:switchV]; 
    UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:navController]; 
[pop presentPopoverFromRect:cell.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

[switchV釋放];

我在做什麼錯?

+0

如果您在問題中發佈代碼並解釋發生的事情與您的期望相比會更好。 – Anna 2010-11-22 00:22:09

+0

我貼了它,它的pastie鏈接:) – Anthony 2010-11-22 00:32:38

+0

這段代碼是否在didSelectRowAtIndexPath中?你已經聲明瞭單元格,但沒有設置它。 – Anna 2010-11-22 00:43:14

回答

0

在表格視圖單元格中有一個按鈕,並且您想在按下按鈕時顯示指向該單元格的彈出窗口。

首先,使用這樣的事情在的cellForRowAtIndexPath將按鈕添加到單元:
(不必是圓角的矩形)

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button setFrame:CGRectMake(100, 0, 100, 30)]; 
[button setTitle:@"Button" forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(profileUser:) 
         forControlEvents:UIControlEventTouchUpInside]; 
[cell.contentView addSubview:button]; 

上述情況的一個很重要的一點是,在@選擇,在profileUser之後有一個冒號(它告訴按鈕發送對自身的引用作爲profileUser的第一個參數)。這個參考可以用來確定選擇了哪個單元。

的profileUser:方法應該是這樣的:

-(void)profileUser:(UIButton *)button 
{ 
    UITableViewCell *cell = (UITableViewCell *)[[button superview] superview]; 
    //first superview is cell.contentView 
    //second superview is cell 

    UserProfile *switchV = [[UserProfile alloc] initWithNibName:nil bundle:nil]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:switchV]; 
    UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:navController]; 

    [pop presentPopoverFromRect:cell.frame inView:self.view 
     permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

    [switchV release]; 
    [navController release]; 

    self.popoverController = pop; //save in property for later release 

    [pop release]; 
} 

如果可能的話,離開箭頭方向UIPopoverArrowDirectionAny,讓它找出把它最好的地方。

編輯:
,以顯示與朝上的按鈕,而不是單元格中的箭頭酥料餅,用這個:

[pop presentPopoverFromRect:button.frame inView:cell 
    permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

然而,根據小區的屏幕上的位置,彈出窗口可能看起來不正確。除非您確定結果,否則請使用「任何」而不是「上」。

另請注意,您應該保存對popover控制器的引用,以便以後發佈(在dealloc中),否則方法中的[pop release]可能會導致崩潰。有關詳細示例,請參閱sample app Popovers

+0

嘿男人謝謝!現在我將如何去使用按鈕框顯示它?說出按鈕位於顯示位置的單元格的正下方?我嘗試使用它的框架,但只顯示最新的單元格,而不是其他單元格。 – Anthony 2010-11-22 03:33:44

+0

更新了答案。不清楚你的意思是「最新的細胞而不是其他細胞」。 – Anna 2010-11-22 03:56:51