【发布时间】: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