Итак, давайте подведем итоги.
у вас есть UIWebView
встроенный в UINavigationController
. Что вы хотите сделать, это добавить кнопку на панели навигации, чтобы пользователь мог хранить URL-адреса некоторых веб-сайтов, на которых он хочет отслеживать. Если пользователь нажимает эту кнопку, URL-адрес текущего веб-сайта сохраняется в вашем приложении и отображается на UITableView
, который вы называете FavoriteView
.
Я полагаю, что ваш и ваш взгляд веб-FavoriteView
управляются одним и тем же контроллером Если это не так, то измените код в соответствии с вашей структуры.
Если вам нужно только сохранить URL-адреса, то вы можете использовать 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
}
Наконец, вы можете отображать сохраненные URL-адреса в своем FavoriteView
, который является 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
}
И, наконец, вы хотите, чтобы загрузить выбранный URL, когда Вы выбираете ячейку вашего любимого точки зрения, так реализовать этот метод UITableViewDelegate
«s :
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
let url = self.urlArray[indexPath.row]
let request = NSURLRequest(URL: url)
self.webView.loadRequest(request)
}
повторяю один раз: вы должны адаптироваться, что к коду, я думаю, ваш UIWebView
и ваши UITableView
не управляются одним и тем же контроллером, например.
Я не понимаю: вы хотите сохранить событие щелчка или вы хотите сохранить URL-адрес веб-сайта? Я имею в виду, что будет отображаться на вашем столе? – Randy
спасибо за ответ. Я думаю, что я точно хочу сохранить URL-адрес веб-сайта, тогда я хочу передать этот URL (в WebView) в ячейку HistoryView, чтобы отображать то, что читали в прошлом, пожалуйста, помогите мне, если вы можете, спасибо –