【问题标题】:Populating UISearchBar with String from PrepareForSegue with CoreData/NSFetchedResultsController使用 CoreData/NSFetchedResultsController 使用 PrepareForSegue 中的字符串填充 UISearchBar
【发布时间】:2014-04-07 15:05:58
【问题描述】:

我有一个简单的应用程序,它是一个表格视图 (TV1),由用户点击导航栏中的加号按钮来填充。用户被带到添加条目屏幕,点击“名称”文本字段会显示另一个表格视图 (TV2),供用户添加现有条目、搜索现有条目或添加新条目。这非常有效,并且委托确保我在新表视图 (TV2) 中选择的内容填充名称文本字段。

我想要实现的也是相反的;如果用户已经填充了名称文本字段并单击它以调出 TV2,我希望搜索栏已经填充了通过的字符串,同时确保搜索仍然有效。

例如,如果我有 John 的 nameTextField,当我单击 nameTextField 并被带到 TV2 时,我希望 searchBar.text 显示 John,而且搜索现在只显示包含 John 的条目这个名字,就像我开始输入约翰这个名字一样。

我正在使用 Core Data 和 NSFetchedResultsController。

在Add Entry的prepaeForSegue中,我是这样做的:

if ([self.nameTextField.text length] > 0)
{
    [envylopeNameTextFieldTableViewController setSelectedName:self.nameTextField.text];
}

在TV2中,setSelectedName方法是:

- (void)setSelectedName:(NSString *)selectedName
{
    _selectedName = selectedName;
    self.nameAddSearchBar.text = selectedName; 
    [self searchBar:self.nameAddSearchBar textDidChange:selectedName];
}

最后一行是我的试验,因为该方法是我开始搜索时调用的方法,所以我认为我可以调用它。我试过没有它,用 self.nameAddSearchBar.text = self.selectedName 和 _selectedName 什么都没有; searchBar 没有被填充。

通过断点,我可以看到 selectedName = John 和 _selectedName = John,但 self.nameAddSearchBar.text = nil。

我可以想象我只有一两行代码,但我只是不确定如何继续。

任何帮助都会非常棒。

谢谢,

【问题讨论】:

  • 在您的 setSelectedName 方法中尝试 [self.nameAddSearchBar setText:selectedName];我偶尔会遇到使用 .syntax 不起作用但使用方法调用的问题。您还可以将该作业移至 prepareForSegue 以查看它是否在那里工作。例如:envylopeNameTextFieldTableViewController.nameAddSearchBar.text = self.nameTextField.text;
  • @digitalHound 非常感谢您的回复,这两种方法都有意义。然而,两者似乎都不起作用——结果相同;我想知道我是否应该打电话给类似的东西。我知道它很接近!
  • 您的搜索栏是添加到情节提要还是代码中?搜索栏是否可能尚未实例化?
  • 它设置在故事板中,但是嗯.. 这可能是一个好点。我的意思是 viewDidLoad 正在分配 searchBar 委托,但很有可能它可能还没有被实例化.. 对基本问题感到抱歉(我对 iOS 编程还是很陌生).. 我将如何确保searchBar 是否更早实例化?
  • @digitalHound 我做了以下工作来完成这项工作 - 我将 prepareForSegue 留给了 setSelectedName 并在 viewDidLoad 中,正如你所建议的,我放置了 self.nameAddSearchBar.text = _selectedName; - 如果我做了 viewWillAppear,同样的工作,但我很高兴将它留在 viewDidLoad 中。非常感谢你的帮助。我想接受你的答案,但需要一个完整的答案 - 你介意填写一个,我会接受并投票吗?再次感谢

标签: ios core-data uitableview uisearchbar nsfetchedresultscontroller


【解决方案1】:

尝试移动

self.nameAddSearchBar.text = selectedName 

从设置器 (-setSelectedName) 到 TV2 中的 viewDidLoad。这里的问题是您试图在加载之前分配 nameAddSearchBar (一个视图)。

由于搜索栏是“视图”的一部分,直到“viewDidLoad”才可用。您可以使用正确的值设置 selectedName 属性,然后在视图加载后(在 viewDidLoad 中)使用该值更新视图(搜索 bar.txt)。

【讨论】:

  • 再次感谢!真的很感激!
猜你喜欢
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2010-12-30
  • 2017-02-02
相关资源
最近更新 更多