好的,这是一个非常简单的问题,但长期以来让我很沮丧。
我在故事板中创建了一个视点,并在顶部放置了一个搜索栏和搜索显示控制器。如何获取搜索栏的结果并将其存储在对象中并将该对象传递到其他视图?我尝试为UIViewController制作另一个类并弄乱“prepareforsegue”方法,但这导致黑屏。
我想要一个像这样的搜索栏:http://www.appcoda.com/how-to-add-search-bar-uitableview/
但我没有在表视图中搜索,而是想使用用户输入的搜索结果,并在将其用于另一个对象后将其传递给另一个视图(以从互联网获取结果)。
有人可以帮助我,并就此事给我一些指导吗?非常感谢你。
答案 0 :(得分:1)
您可以使用NSUserDefaults存储数据并在另一个视图中使用它,理想的方法是在单独的类中创建它,以便您能够重用它,例如:创建一个名为Reusables的类,< / p>
在Reusables.h
中#import <Foundation/Foundation.h>
@interface Reusables : NSObject
+(void)storeDataToDefaults :(NSString *)keyName objectToAdd:(id)data;
+(NSString *)getDefaultValue:(NSString *)key;
+(void)removeDataFromDefaultsWithKey:(NSString *)keyName;
@end
在Reusables.m
中#import "Reusables.h"
@implementation Reusables
+(void)storeDataToDefaults :(NSString *)keyName objectToAdd:(id)data
{
if (![data isKindOfClass:[NSNull class]])
{
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
[defaults setValue:data forKey:keyName];
[defaults synchronize];
}
}
+(NSObject *)getDefaultValue:(NSString *)key
{
NSObject *value=[[NSUserDefaults standardUserDefaults] valueForKey:key];
return value;
}
+(void)removeDataFromDefaultsWithKey:(NSString *)keyName
{
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
if ([defaults valueForKey:keyName])
[defaults removeObjectForKey:keyName];
[defaults synchronize];
}
现在在你想要存储结果的视图控制器中导入Reusables.h并执行此操作以存储搜索结果的值
[Reusables storeDataToDefaults:@"SearchResults" objectToAdd:yourSearchResults];
请注意,yourSearchResults是包含搜索结果的数据,可以是单个值或数组
现在在视图控制器中你想使用数据导入Reusables.h就这样做
someVariableToStoreData=[Reusables getDefaultValue:@"SearchResults"];
你完成它的地方你可以随时使用
[Reusables removeDataFromDefaultsWithKey:@"SearchResults"];
如果需要,请清除该值。
答案 1 :(得分:0)
您需要将ViewController设置为searchBar的委托,然后实现委托方法以实际执行搜索/向前传递信息。 看一下苹果文档here。
您要实施的方法是:
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar; // return NO to not become first responder
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar; // called when text starts editing
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar; // return NO to not resign first responder
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar; // called when text ends editing
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText; // called when text changes (including clear)
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text NS_AVAILABLE_IOS(3_0); // called before text changes
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar; // called when keyboard search button pressed
- (void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar; // called when bookmark button pressed
- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar; // called when cancel button pressed
- (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar NS_AVAILABLE_IOS(3_2); // called when search results button pressed
通过使用searchBar.text,您可以获得当前用户输入。