2016-07-17 3 views
1

Я строю приложение для чтения-аниме в iOS, используя swift.Как сделать кнопку для UIWebView?

Я использую UIWebView для отображения URL-адреса, связанного с аниме, который люди хотят читать. У меня есть FavoriteView (с использованием TableView), который отображает аниме, которое люди любят в TableViewCell. Когда люди читают в UIWebView, я хочу сделать «Like Button» на панели навигации.

В котором люди могут нажать на эту кнопку «Like Button», и я хочу что-то сделать, чтобы сохранить событие click (или URL-адрес, отображаемый в WebView, я не уверен), чтобы сохранить его как object (могу ли я сделать это? :(), то я хочу передать его в FavoriteView, чтобы отобразить его в Cell of FavoriteView.

Кто-то предлагает мне сохранить это событие click (как объект) coredata, но я могу не представляют себе, что это такое.

+1

Я не понимаю: вы хотите сохранить событие щелчка или вы хотите сохранить URL-адрес веб-сайта? Я имею в виду, что будет отображаться на вашем столе? – Randy

+0

спасибо за ответ. Я думаю, что я точно хочу сохранить URL-адрес веб-сайта, тогда я хочу передать этот URL (в WebView) в ячейку HistoryView, чтобы отображать то, что читали в прошлом, пожалуйста, помогите мне, если вы можете, спасибо –

ответ

0

Итак, давайте подведем итоги.

у вас есть 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 не управляются одним и тем же контроллером, например.

+0

Я хочу сказать вам, что я развертываю вашу идею, и это кажется успешным, спасибо вам за помощь. <3 <3 <3 спасибо –

+0

Я не использую раскадровку. Я использую файл .xib. Мои UIWebView и UITableView управляются двумя разными контроллерами, поэтому я все еще не могу найти способ: передать данные (эти URL), которые хранятся в UIWebView, в UITableView. Я думаю много, но я все еще не понимаю, как это сделать. Когда у вас будет свободное время, пожалуйста, помогите мне. Спасибо вам –

+0

Ну, в контроллере есть массив, называемый 'favoriteUrls', который управляет вашим' UITableView'. В методе 'viewDidLoad' этого контроллера извлекайте данные из' NSUserDefaults': 'self.favoritesUrls = NSUserDefaults.standardUserDefaults.objectForKey (" keyUrlArray ")' и используйте этот массив в качестве источника данных вашего представления таблицы (так что в основном , заменить 'urlArray' на' favoritesUrls' - это методы 'UITableViewDelegate', которые я указываю в коде – Randy

0

Легче способ сделать это:

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*\] 
} 
+0

благодарит вас за то, что прочитал эту тему и помог мне. Я попробую ваш метод. Спасибо вам !!!!!!!!!! –

Смежные вопросы