我正在创建一本用于学习语言的交互式书籍。它有阅读,测验和一些简单的游戏。每章的内容都是一个HTML文件。该书允许用户了解文本中存在的大约300个单词。 Earch字被包含在这样的链接中:< a href =“word”> word< / A>当用户触摸链接时,会出现一个模态视图,其中包含有关该单词的翻译和信息。
这是我用来获取链接的代码:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// currentWord is the word in the link
self.currentWord = [[request URL] lastPathComponent];
// okToCatchLinks is a BOOL that I use to avoid showing the modalview when the page
// is loaded for the first time.
if (okToCatchLinks){
NSLog(@"Ok to catch links!");
WordViewController *viewController = [[WordViewController alloc] initWithNibName:@"WordViewController" bundle:nil]
// I did my homework creating the delegate protocol to dismiss the modal view.
viewController.delegate = self;
// This is a label in the modalview showing the word in the HTML link.
viewController.labelTitle = self.currentWord;
// Create a Navigation controller to add the "DONE" dismiss button
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:viewController];
navController.modalPresentationStyle = UIModalPresentationFormSheet;
navController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
// show the navigation controller modally
[self presentModalViewController:navController animated:YES];
// Clean up resources
[navController release];
[viewController release];
}
okToCatchLinks = YES;
return YES;
}
使用此代码,我将在字符串变量中获取所选单词。然后我使用CoreData在DB中搜索该单词。 HTML是UTF-8编码的。我必须能够用不同的语言搜索该单词。因此,如果用户点击单词(日本语)或(简历),我必须能够在数据库中找到它。 对于数据存储,我将CSV文件转换为.sqlite文件。
我想知道是否有更好的方法来做到这一点。我个人不喜欢使用< a href =“”>获取链接,但我找不到任何其他方式来获取链接中的当前单词。在DB中执行该单词的搜索也不干净,因为我没有为每一行使用任何UID。我只是将持有该单词的字符串与DB的相应列中的单词进行比较。
有更有效的方法吗?
要恢复:拥有单词列表,在HTML中标记这些单词,以便用户可以从数据库中触摸并检索有关该单词的信息。
答案 0 :(得分:0)
一些观察结果:
UID:只要您的文字是唯一的,您就可以将该列用作主键,而无需使用单独的UID。实际上,核心数据无论如何都会为您创建一个,因此您可以使用objectWithID
来检索您的单词。
HTML链接:您的UIWebView
解决方案,HTML文件和链接对我来说似乎是可行的。但是,您当然也可以使用UITextView
并使用NSRange
以编程方式处理选择。这可能会更复杂,但也更“原生”。
委托:如果您想将信息传递回首次展示模型视图控制器的视图(太多的作业!;-)),您只需要一个委托。用
从内部解雇它[self dismissModalViewControllerAnimated:YES];