向下移动tableview以显示隐藏的文本字段

时间:2015-08-10 00:46:11

标签: ios xcode swift

我有一个视图控制器,我已经删除了一个tableview。我还在tableview后面添加了一个UITextField。当我单击搜索按钮时,我希望tableview向下移动(显示文本字段)。我虽然通过使用以下内容弄明白了这一点:

self.tableView.frame.origin.y += 50

这有效,但是一旦我点击文本字段,它就会消失。我还提供了一个屏幕截图,我认为它可以帮助您了解我想要实现的目标。想要在Swift中做到这一点。一如既往,任何帮助都非常感谢!

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以将UITextField设置为UITableView的headerView,如下所示:

// set the tableHeaderView to be your UITextField
self.tableView.tableHeaderView = YOUR_TEXTFIELD
// set the offset so that the textField will be initially hidden
self.tableView.contentOffset = CGPointMake(0, YOUR_TEXTFIELD.frame.size.height)
// then in the IBAction of your search button, set the offset to be (0,0)
self.tableView.contentOffset = CGPointZero

其实你不需要在那里放一个按钮。向下滚动UITableView将在顶部显示headerView(也就是UITextField)。

BTW,对于你的情况,UISearchBar比UITextField更好。

<强>更新

希望您已阅读上述答案。我没有足够的声誉来评论,所以我只想更新我的答案。

根据您的评论(也许您应该将其添加到您的问题详情中,顺便说一下):

  • UISearchBar通常用于搜索现有行,但它可以执行其他操作。无论如何,tableView的数据在您的控制之下。您可以确定如何更新委托方法中的行:
    - (void)updateSearchResultsForSearchController:(UISearchController *)searchController
  • 对于多个搜索字段,我有两种方法可以提出:

    1. 支持UISearchBar中关键字之间的空格,以便用户可以搜索多个关键字的组合。试试这个:
    2. // strip out all the leading and trailing spaces
      NSString *strippedString = [YOUR_SEARCHBAR_TEXT stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

      // break up the search terms (separated by spaces) NSArray *searchItems = nil; if (strippedString.length > 0) { searchItems = [strippedString componentsSeparatedByString:@" "]; }

      1. 如果需要,请使用UISearchBar的范围按钮。

答案 1 :(得分:0)

虽然如果我沿着UISearchBar路径走下去,这里的答案很有帮助,我真的需要显示一个自定义搜索字段。我通过以下方式实现了这一目标:

  1. 使用AutoLayout
  2. 为我的垂直约束创建IBOutlet
  3. 使用以下代码:public partial class VT_Video { public int ID { get; set; } public string title { get; set; } public string description { get; set; } public virtual ICollection<VT_VideoTag> VT_VideoTag { get; set; } } public partial class VT_VideoTag { public int ID { get; set; } public int tagID { get; set; } public int videoID { get; set; } public virtual VT_Tag VT_Tag { get; set; } public virtual VT_Video VT_Video { get; set; } } public partial class VT_Tag { public int ID { get; set; } public string name { get; set; } public virtual ICollection<VT_VideoTag> VT_VideoTag { get; set; } }
  4. 感谢所有试图提供帮助的人!