我想要做的是在点击UITableViewCell时在smaller view
上显示UITableView
。我不想转换到另一个UIViewController,而是“popup
”UITableView顶部的视图,它将包含有关单击UITableViewCell的更多信息。
我不认为我在寻找UIAlertView,但我正在寻找一个可以放置标签,按钮,图片等的UIView。
我希望我的术语是正确的。我还是个新手:)
莱昂
P.S。我所有的搜索都提出了UIAlertView的东西。
答案 0 :(得分:1)
尝试使用UITableView的didSelectRowAtIndexPath
委托功能,代码未经测试可以给你一个想法:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Assuming view is at zero index of XIB file.
// this view will contain all lable and other controls
UIView *customView = (UIView *)[[NSBundle mainBundle] loadNibNamed:@"NameOfCustomViewXIBFile" owner:nil options:nil] objectAtIndex:0];
customView.transform = CGAffineTransformMakeScale(0.0f, 0.0f);
[self.view addSubView:customView];
[UIView animateWithDuration:0.5
animations:
^{
customView.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
}
];
}
希望它有所帮助!
修改强>
动画删除此弹出窗口:
customView.transform = CGAffineTransformMakeScale(1.0f, 1.0f);
[UIView animateWithDuration:0.5
animations:
^{
customView.transform = CGAffineTransformMakeScale(0.0f, 0.0f);
}
];
[customView removeFromSuperView];
答案 1 :(得分:0)
现有答案的问题在于,如果用户滚动表格以使单元格脱离屏幕并重新打开,则弹出的视图可能会因细胞重复使用而消失。为避免这种情况,您必须在单元格"模型"中存储一些内容。这样每次调用cellForRowAtIndexPath:时,如果它应该在那里,你用它的弹出视图重新生成单元格。只显示didSelectRowAtIndexPath:可能不够。
如果我编码它,我喜欢的方法是让所有单元格成为UITableViewCell的子类。该子类包含一个额外的BOOL showPopup。在你的setter setShowPopup中:你设置了值,还创建了&显示或破坏/删除/隐藏"弹出"该单元格的子视图。 (你可以让子视图成为一个总是在周围的类成员,在需要时分配和分配它,并保留一个引用,只需要显示/隐藏;这是一个尺寸/空间性能权衡。)
-(void) setShowPopup:(BOOL show) {
showPopup = show;
if(show) {
// create subview, and add to view
} else {
// remove and destroy subview
}
}
在UITableView委托/数据源中:
-(UITableViewCell) UITableView:(UITableView *table) cellForRowAtIndexPath:(NSIndexPath *ip) {
// usual stuff to get a reusable cell or allocate a new one, and prepare it for display
// then
if(showPopup) {
// create subview and add to view
} else {
// remove and destroy subview
}
}
答案 2 :(得分:0)
我在GLKViewController中使用了类似的UIButton,因此这可能适用于UITableViewController。我只是禁用了按钮并添加了一个圆形边框,所以它看起来像一个自定义弹出窗口。当用户点击一些有趣的东西时,我更改了按钮上的隐藏标志以显示或隐藏它。
这样的东西使它看起来像弹出式
在viewDidLoad中:
// make info "popup"
_infoBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_infoBtn.bounds = CGRectMake( 0, 0, kRightButtonBarDim, kRightButtonBarDim);
_infoBtn.backgroundColor = [UIColor colorWithWhite:1 alpha:0.75];
_infoBtn.selected = NO;
_infoBtn.titleLabel.font = [UIFont boldSystemFontOfSize:kTableCellFontSize];
_infoBtn.titleLabel.lineBreakMode = NSLineBreakByCharWrapping;
[_infoBtn setTitleColor:[UIColor colorWithWhite:.3 alpha:1] forState:UIControlStateDisabled];
// border
_infoBtn.layer.cornerRadius = 5; // rounded corners
// drop shadow
_infoBtn.layer.masksToBounds = NO;
_infoBtn.layer.shadowColor = [UIColor blackColor].CGColor;
_infoBtn.layer.shadowOpacity = 0.8;
_infoBtn.layer.shadowRadius = 12;
_infoBtn.layer.shadowOffset = CGSizeMake(12.0f, 12.0f);
_infoBtn.enabled = NO;
_infoBtn.hidden = YES;
[self.view addSubview:_infoBtn];
然后在tableView的didSelectRowAtIndexPath中更新按钮中所需的任何信息,并将hidden设置为NO。您应该能够向此UIButton添加任何必要的子视图。
_infoBtn.frame = CGRectMake(20, 20, 20, 20); // set this wherever you like
[_infoBtn setTitle:@"text" forState:UIControlStateDisabled];
_infoBtn.hidden = NO;
我刚刚测试了一个UIViewController,它有一个UITableView作为子视图,它看起来一样。滚动并没有影响它(即,按钮没有随着滚动移动,几乎像HUD一样)因为按钮被添加到顶级UIView。 Dunno如果这是你需要的,但希望它会给你一些想法。