TTTableViewController showMenu:forCell:example

时间:2011-01-06 21:38:30

标签: objective-c view menu controller three20

我正在寻找一个如何创建动画行菜单的例子,如Facebook&适用于iPhone的Twitter应用程序。我看到TTTableViewControllershowMenu:forCell:方法,但我找不到任何如何使用它的示例。特别是在URL Navigator选择器的上下文中,但任何示例都会很棒。

1 个答案:

答案 0 :(得分:0)

你能找到一个例子。

我也遇到了和你一样的问题。我找不到一个星期前使用TTTableViewController showMenu:forCell:方法的例子。在弄乱代码之后,我想出了这个......

创建TTTableViewCell的子类,并将UIButton(作为启动菜单视图的触发器)添加到视图中。

@interface MyViewCell : TTTableViewCell {
}

- (id) initWithName:(NSString *)name target:(id)target action:(SEL)action {
  // ...

    UIButton *moreButton = [UIButton buttonWithType:UIButtonTypeCustom];
    moreButton.frame = CGRectMake(268.0f, 6.0f, 32.0f, 32.0f);
    [moreButton setImage:TTIMAGE(@"bundle://Icon_More.png")
                     forState:UIControlStateNormal];
    [moreButton addTarget:target action:action 
         forControlEvents:UIControlEventTouchUpInside];
    [self moreButton];

  // ...
}

接下来,创建一个TTTableViewController的子类,并将自定义TTTableViewCells添加到数据源。

@interface MyTableViewController : TTTableViewController {
}

- (void) createModel {  
  self.dataSource = [TTListDataSource dataSourceWithObjects:
    [[[ContactViewCell alloc] initWithName:@"Cell 1"
                                    target:self 
                                    action:@selector(moreButtonDidPress:)]
                                    autorelease],
    [[[ContactViewCell alloc] initWithName:@"Cell 2"
                                    target:self 
                                    action:@selector(moreButtonDidPress:)]
                                    autorelease],
    nil];
}

在动作处理程序中,调用showMenu:forCell:。诀窍是确定按钮属于哪个单元格,然后用菜单视图替换该单元格。这就是我所做的。

- (void) moreButtonDidPress:(id)sender {
  // Load our custom menu view from a nib.
  UIView *menuView = [[UIView alloc] initWithFrame:cell.contentView];

  UIButton *moreButton = (UIButton *) sender;
  // Convert plusButton bounds to the the coordinate system of table view
  // and then get the cell containing the button.
  CGRect coord = [plusButton convertRect:moreButton.bounds toView:self.tableView];
  NSIndexPath *path = [self.tableView indexPathForRowAtPoint:coord.origin];
  TTTableViewCell* cell = (TTTableViewCell*) [self.tableView 
                                              cellForRowAtIndexPath:path]; 

  // Now call showMenu with the menu to display on the associated cell.
  [self showMenu:menuView forCell:cell animated:YES]; 
}

它并没有完全使用URL Navigator选择器,但它功能正常。