由 UITableView 制成的下拉按钮不重叠按钮

Posted

技术标签:

【中文标题】由 UITableView 制成的下拉按钮不重叠按钮【英文标题】:Dropdown Button made from UITableView not overlapping buttons 【发布时间】:2017-11-02 16:47:23 【问题描述】:

我使用 TableView 实现了一个下拉按钮,这样当用户单击按钮时,按钮底部会弹出一个下拉列表。到目前为止,此功能运行良好。但是,当我在第一个按钮的底部添加另一个按钮并单击下拉菜单时,tableView 不会与底部的按钮重叠。它不是出现在顶部,而是出现在下方。

我的问题是当点击下拉按钮时如何让 tableView 出现在第二个按钮的顶部。我在下面插入了我的代码。

#
import < UIKit / UIKit.h >

@interface ViewController: UIViewController < UITableViewDataSource, UITableViewDelegate >

@property(weak, nonatomic) IBOutlet UIButton * categoriesBtn;
@property(weak, nonatomic) IBOutlet UITableView * categoriesTable;

@property(strong, nonatomic) NSArray * data; 
 -(IBAction) categoriesButton: (id) sender;
 -(IBAction) submit: (id) sender;

@end

@implementation ViewController

  -(void) viewDidLoad 
    [super viewDidLoad];

    [self.categoriesBtn setTitle: @ "+ Categories" forState: UIControlStateNormal ];
    self.data = [[NSArray alloc] initWithObjects: @ "Value1", @ "Value2", @ "Value3", @ "Value4", @ "Value5", nil ];
    self.categoriesTable.delegate = self;
    self.categoriesTable.dataSource = self;
    self.categoriesTable.hidden = YES;

  

  -(NSInteger) tableView: (UITableView * ) tableView numberOfRowsInSection: (NSInteger) section 

    return [self.data count];

  

  -(UITableViewCell * ) tableView: (UITableView * ) tableView cellForRowAtIndexPath: (NSIndexPath * ) indexPath 

    static NSString * simpleTableIdentifier = @ "SimpleTableItem";
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: simpleTableIdentifier];
    if (cell == nil) 
      cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: simpleTableIdentifier];
    
    cell.textLabel.text = [self.data objectAtIndex: indexPath.row];

    return cell;
  

  -(IBAction) categoriesButton: (id) sender 
    if (self.categoriesTable.hidden == YES) 
      self.categoriesTable.hidden = NO;
     else
      self.categoriesTable.hidden = YES;
  


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

    UITableViewCell * cell = [self.categoriesTable cellForRowAtIndexPath: indexPath];
    [self.categoriesBtn setTitle: cell.textLabel.text forState: UIControlStateNormal];
    self.categoriesTable.hidden = YES;

  

  -(void) didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];
  

@end

【问题讨论】:

你有多少个UITableView?而且我找不到每个单元格上的按钮在哪里。 我现在只有一个 UITableView 但是一旦我让这部分工作,我想实现多个。我不确定我是否理解有关单元格按钮的问题。 你的下拉列表是什么? the button on a cell 我的意思是我看不到你的手机并按下按钮;) 我的下拉列表是viewDidLoad中定义的数组。 不,我的意思是什么视图显示你的数组 【参考方案1】:

要使categoriesTablequeryTypeButton 重叠,您应该更改ViewController 的子视图的顺序,如下图所示。使用此顺序,categoriesButton 位于按钮下方,因此当它显示在屏幕上时,它将位于屏幕顶部(视图树)。

或者每次单击categoriesButton 时,您都应该将categoriesTable 放在前面。如果您这样做,您的categoriesTable 将在出现时与您的所有按钮重叠。像这样更改您的 categoriesButton 方法

-(IBAction)categoriesButton: (id) sender 
  [self.view bringSubviewToFront:self.categoriesTable];

  if (self.categoriesTable.hidden == YES) 
    self.categoriesTable.hidden = NO;
   else
    self.categoriesTable.hidden = YES;

【讨论】:

谢谢它的工作。您介意解释一下为什么更改订单有效吗? @kudzi 我已经通过一些解释更新了我的答案。如果您不明白,请告诉我;) 这是最简单最好的解释,谢谢。很清楚,我理解。 欢迎我的朋友@kudzi ;)

以上是关于由 UITableView 制成的下拉按钮不重叠按钮的主要内容,如果未能解决你的问题,请参考以下文章

UITableView Section Index 重叠行删除按钮

使用按钮和 UITableView 快速下拉

在 Shiny 中,避免 selectInput 下拉菜单与其下方的操作按钮重叠

当按下另一个可触摸的不透明度时,一个可触摸的不透明度不会按下

iOS7 UItableview编辑模式内容重叠[重复]

在handsontable制成的表格中,下拉框如何实现联动?