如何为 UIWebView 制作一个点赞按钮?
How to make a like button for UIWebView?
我正在 iOS 使用 swift 构建一个 reader 动漫应用。
我使用 UIWebView 来显示链接到人们想要阅读的动漫的 URL。
我有一个 FavoriteView(使用 TableView),它在 TableViewCell 中显示人们最喜欢的动漫。
当人们在 UIWebView 中阅读时,我想在导航栏上做一个 "Like Button"。
其中,人们可以按下那个 "Like Button",我想做一些事情来保存那个点击事件(或者 WebView 中显示的 URL,我不确定) 像对象一样存储它(我可以这样做吗?:( ),然后我想将它传递给 FavoriteView 以在 FavoriteView 的 Cell 中显示它。
有人建议我用 coredata 存储那个点击事件(像一个对象),但我无法想象它是什么。
所以让我们总结一下。
您在 UINavigationController
中嵌入了 UIWebView
。
您要做的是在导航栏中添加一个按钮,以便用户可以存储 he/she 想要跟踪的某些网站的 URL。如果用户按下此按钮,则当前网站的 URL 将存储在您的应用程序中,并显示在您称为 FavoriteView
.
的 UITableView
上
我假设你的 FavoriteView
和你的网络视图是由同一个控制器管理的 如果不是这样,那么根据你的结构相应地更改代码.
如果你只需要存储 URLs,那么你可以使用 NSUserDefaults
这比 Core Data
更容易操作(因为你似乎以 iOS 开发,这样开始可能会更好)。
你的控制器应该是这样的:
class ViewController: UITableViewDelegate, UITableViewDataSource
{
let favoriteView = UITableView()
let urlArray = Array<NSURL>()
let webView = UIWebView()
override func viewDidLoad() {
super.viewDidLoad()
// Initialise your views
}
// Etc... ( rest of your code )
}
您必须将以下代码添加到您的 ViewController
(除非您的代码结构不同,否则您应该根据您当前的配置调整答案)。
所以首先,像这样向 UINavigationBar
添加一个按钮 :
let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(addButtonTapped))
self.navigationItem.rightBarButtonItem = addButton
然后,您可以实现 addButtonTapped
方法,点击按钮时将调用该方法:
func addButtonTapped()
{
// We first check that the webView actually has a URL, otherwise we return
guard let url = self.webView.request?.URL
else {return}
// Then we store this URL is NSUserDefaults
// As we will have other URLs to store, it's interesting to store an array of URLs in NSUserDefaults
let defaults = NSUserDefaults.standardUserDefaults()
// We first check if the array already exists in NSUserDefaults
// If it is the case, we use the existing one, if not, we use a new one
if let existingUrlArray = defaults.objectForKey("keyUrlArray") as? Array<NSURL>
{
self.urlArray = existingUrlArray
}
self.urlArray.append(url)
defaults.setObject(self.urlArray, forKey: "keyUrlArray")
self.favoriteView.reloadData
}
最后,您可以在 FavoriteView
中显示存储的 URL,即 UITableView
。管理您的 FavoriteView
的控制器必须以这种方式实现 UITableViewDelegate
方法:
// Call this method in viewDidLoad() so your UITableView is initialised
func initialiseFavoriteView()
{
self.favoriteView.delegate = self
self.favoriteView.dataSource = self
self.favoriteView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cellIdentifier")
self.loadFavoritesAndUpdateTableView()
}
// This method fetches the favorites url from NSUserDefaults and store them into self.urlArray which contains the data of your UITableView
func loadFavoritesAndUpdateTableView()
{
if let urlArrayCheck = NSUserDefaults.standardUserDefaults().objectForKey("keyUrlArray") as? Array<NSURL>
{
self.urlArray = urlArrayCheck
}
self.favoriteView.reloadData()
}
// MARK: UITableViewDelegate methods
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier", forIndexPath: indexPath)
let url = self.urlArray[indexPath.row]
cell.textLabel?.text = url.absoluteString
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.urlArray.count
}
最后,当你 select 一个你最喜欢的视图的单元格时,你想加载 selected URL,所以实现这个 UITableViewDelegate
的方法:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
let url = self.urlArray[indexPath.row]
let request = NSURLRequest(URL: url)
self.webView.loadRequest(request)
}
我再重复一遍:你必须使它适应你的代码,我猜你的 UIWebView
和你的 UITableView
不是由同一个控制器管理的。
更简单的方法:
let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(addFavorite))
self.navigationItem.rightBarButtonItem = addButton
然后创建一个名为 favorites
的数组。
然后:
func addFavorite() {
favorites.append(theFavorite)
}
保存:
NSUserDefaults.standardUserDefaults().setObject(favorites, forKey: "favorites")
获得:
if let f = NSUserDefaults.standardUserDefaults().objectForKey("favorties") {
favorites = f as! [\*The type of favorites e.g. String or Int*\]
}
我正在 iOS 使用 swift 构建一个 reader 动漫应用。
我使用 UIWebView 来显示链接到人们想要阅读的动漫的 URL。 我有一个 FavoriteView(使用 TableView),它在 TableViewCell 中显示人们最喜欢的动漫。 当人们在 UIWebView 中阅读时,我想在导航栏上做一个 "Like Button"。
其中,人们可以按下那个 "Like Button",我想做一些事情来保存那个点击事件(或者 WebView 中显示的 URL,我不确定) 像对象一样存储它(我可以这样做吗?:( ),然后我想将它传递给 FavoriteView 以在 FavoriteView 的 Cell 中显示它。
有人建议我用 coredata 存储那个点击事件(像一个对象),但我无法想象它是什么。
所以让我们总结一下。
您在 UINavigationController
中嵌入了 UIWebView
。
您要做的是在导航栏中添加一个按钮,以便用户可以存储 he/she 想要跟踪的某些网站的 URL。如果用户按下此按钮,则当前网站的 URL 将存储在您的应用程序中,并显示在您称为 FavoriteView
.
UITableView
上
我假设你的 FavoriteView
和你的网络视图是由同一个控制器管理的 如果不是这样,那么根据你的结构相应地更改代码.
如果你只需要存储 URLs,那么你可以使用 NSUserDefaults
这比 Core Data
更容易操作(因为你似乎以 iOS 开发,这样开始可能会更好)。
你的控制器应该是这样的:
class ViewController: UITableViewDelegate, UITableViewDataSource
{
let favoriteView = UITableView()
let urlArray = Array<NSURL>()
let webView = UIWebView()
override func viewDidLoad() {
super.viewDidLoad()
// Initialise your views
}
// Etc... ( rest of your code )
}
您必须将以下代码添加到您的 ViewController
(除非您的代码结构不同,否则您应该根据您当前的配置调整答案)。
所以首先,像这样向 UINavigationBar
添加一个按钮 :
let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(addButtonTapped))
self.navigationItem.rightBarButtonItem = addButton
然后,您可以实现 addButtonTapped
方法,点击按钮时将调用该方法:
func addButtonTapped()
{
// We first check that the webView actually has a URL, otherwise we return
guard let url = self.webView.request?.URL
else {return}
// Then we store this URL is NSUserDefaults
// As we will have other URLs to store, it's interesting to store an array of URLs in NSUserDefaults
let defaults = NSUserDefaults.standardUserDefaults()
// We first check if the array already exists in NSUserDefaults
// If it is the case, we use the existing one, if not, we use a new one
if let existingUrlArray = defaults.objectForKey("keyUrlArray") as? Array<NSURL>
{
self.urlArray = existingUrlArray
}
self.urlArray.append(url)
defaults.setObject(self.urlArray, forKey: "keyUrlArray")
self.favoriteView.reloadData
}
最后,您可以在 FavoriteView
中显示存储的 URL,即 UITableView
。管理您的 FavoriteView
的控制器必须以这种方式实现 UITableViewDelegate
方法:
// Call this method in viewDidLoad() so your UITableView is initialised
func initialiseFavoriteView()
{
self.favoriteView.delegate = self
self.favoriteView.dataSource = self
self.favoriteView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cellIdentifier")
self.loadFavoritesAndUpdateTableView()
}
// This method fetches the favorites url from NSUserDefaults and store them into self.urlArray which contains the data of your UITableView
func loadFavoritesAndUpdateTableView()
{
if let urlArrayCheck = NSUserDefaults.standardUserDefaults().objectForKey("keyUrlArray") as? Array<NSURL>
{
self.urlArray = urlArrayCheck
}
self.favoriteView.reloadData()
}
// MARK: UITableViewDelegate methods
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier", forIndexPath: indexPath)
let url = self.urlArray[indexPath.row]
cell.textLabel?.text = url.absoluteString
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.urlArray.count
}
最后,当你 select 一个你最喜欢的视图的单元格时,你想加载 selected URL,所以实现这个 UITableViewDelegate
的方法:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
let url = self.urlArray[indexPath.row]
let request = NSURLRequest(URL: url)
self.webView.loadRequest(request)
}
我再重复一遍:你必须使它适应你的代码,我猜你的 UIWebView
和你的 UITableView
不是由同一个控制器管理的。
更简单的方法:
let addButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(addFavorite))
self.navigationItem.rightBarButtonItem = addButton
然后创建一个名为 favorites
的数组。
然后:
func addFavorite() {
favorites.append(theFavorite)
}
保存:
NSUserDefaults.standardUserDefaults().setObject(favorites, forKey: "favorites")
获得:
if let f = NSUserDefaults.standardUserDefaults().objectForKey("favorties") {
favorites = f as! [\*The type of favorites e.g. String or Int*\]
}