显示动态原型单元格的弹出视图

时间:2012-04-18 10:02:41

标签: ios5 storyboard cell segue popover

我正在开发一个带有自定义拆分视图的Ipad应用。在主视图中我有一个tableViewController。我在导航栏中添加了一个带有添加按钮的项目。此按钮链接(我使用故事板)与popover segue链接到另一个tableViewController,其中包含一些输入数据的单元格。按钮“save”将popover视图与masterView列表中的添加项目相关联。我接下来要做的是链接主视图的原型单元格到另一个视图,以使用户能够编辑所选项目。我想将这个视图与popover segue链接(就像添加按钮一样)并且问题在哪里:我从xcode得到一个红色问题:无法编译连接:=> anchorView => >

这是我的代码示例,工作正常。当我点击一个单元格进行编辑时,我想做同样的事情。

masterSplitView表

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"assetCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    // Configure the cell...
    AssetModel *myAssetModel = [self.arrayAsset objectAtIndex:indexPath.row];
    cell.textLabel.text = myAssetModel.name;
   // cell.textLabel.text = @"test";

    return cell;

}

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

    if([segue.identifier isEqualToString:@"addAssetSegue"]){
        AddAssetTVC *addAssetTVC = segue.destinationViewController;
        addAssetTVC.delegate = self;

        UIStoryboardPopoverSegue* popoverSegue = (UIStoryboardPopoverSegue*)segue;
        [addAssetTVC setPopoverController:[popoverSegue popoverController]];

    }

}

- (void) theSaveButtonOnTheAddAssetTVCWasTapped:(AddAssetTVC *)controller{
    [controller.navigationController popViewControllerAnimated:YES];
    [self reloadCache];
    [self.tableView reloadData];
    [self viewDidLoad];
}

添加视图的保存方法:

- (IBAction)save:(id)sender{
    [popoverController dismissPopoverAnimated:YES];
    NSLog(@"Telling the ADDASSET Delegate that Save was tapped on the AddAssetTVC");

    {...unrevelant coredata methods}

    [self.delegate theSaveButtonOnTheAddAssetTVCWasTapped:self];
}

感谢您阅读,

亚历山大

4 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。通过使用自定义segue解决它。在班级的prepare方法中:

  1. 抓住源视图控制器,它是自定义控制器或UITableViewController
  2. 抓住目标控制器
  3. 创建使用目标控制器初始化的UIPopoverController
  4. 获取当前所选行的单元格
  5. 将popover存储为目标控制器上的属性(这样您就可以将其解除,并且不会取消分配)
  6. 使用单元格的frame作为CGRect
  7. 来呈现弹出窗口
  8. 设置弹出框的大小,因为它将是最大大小
  9. 以下是一些示例代码:

    UITableViewController *tvc = (UITableViewController *)self.sourceViewController;
    DetailsViewController *details = (DetailsViewController *)self.destinationViewController;    
    UITableViewCell *cell = [tvc.tableView cellForRowAtIndexPath:[tvc.tableView indexPathForSelectedRow]];
    
    UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:details];
    
    details.popoverController = pop;
    
    CGSize size = CGSizeMake(640, 460);
    pop.popoverContentSize = size;
    
    
    [pop presentPopoverFromRect:cell.frame
                         inView:tvc.tableView 
       permittedArrowDirections:UIPopoverArrowDirectionUp | UIPopoverArrowDirectionDown 
                       animated:YES];
    

答案 1 :(得分:4)

我在我的项目中做的完全相同。我今晚在这里回答了一个非常相似的问题https://stackoverflow.com/a/14514837/1712892如果这有帮助,请告诉我。

答案 2 :(得分:0)

我能用最少的编码做到这一点。试试这个:

  1. 我在工具栏或导航栏中添加了一个按钮。这是一个虚拟按钮,它将成为你的Popover的锚点。禁用该按钮(取消选中“启用”)。您对多个tableviews使用相同的按钮。我使用按钮中的管理器图标图像来模拟向下钻取,或者您可以在调用performSegueWithIdentifier之前在didSelectRowAtIndex方法中为每个设置自定义图像或标题...稍后解释...
  2. 然后将按钮连接到您的Popover视图。显然将类型设置为Popover
  3. 点击Segue箭头并命名Segue,例如:“SegToDetail”。
  4. 现在在使用tableview的Master / Parent代码中添加方法didSelectRowAtIndex ...在该方法中,您可以设置按钮的外观。最重要的是你打电话:[self performSegueWithIdentifier:@“SegToDetail”......就是这样......
  5. 现在,您可以像在任何segue过渡中一样传递prepareForSegue方法中的任何信息。

答案 3 :(得分:0)

根据@ Rich的回答,但使用{ "slopes": { "slopeiOS": { "featuredCourse": "k43l2l2-beginner-ios", "courses": { "k43l2l2-beginner-ios": { "name": "Beginner iOS 1", "order": 12, "price": 250, "salePrice": 150, "onSale": true, "purchases": 12000, "totalMinutes": 102282, "videos": { "k23j3l": { "order": 22, "duration": 150, "title": "How to install Xcode", "description": "Learn how to install Xcode.." } } } } } } } 和Swift。

addAll()