2016-07-19 36 views
-1

我目前正在開發一款應用程序,我希望用戶能夠收藏一個按鈕,然後該按鈕隨即會被添加到該「特定收藏夾」部分ViewController在應用程序中創建「收藏夾」部分

該應用程序是一個音板,因此它被分成(當前)2個字符,在這些字符中,我有用於用戶選擇的聲音文件類別,一旦用戶選擇一個類別,它將加載ViewController可以按下按鈕播放的一組聲音(我知道很簡單)。

我想,以允許用戶喜愛,並在此過程中,新的「收藏最多」按鈕,將顯示在一個新的ViewController自己選擇的按鈕來實現「收藏夾」功能。

我經過這裏瀏覽,發現在某些方面的東西NSUserDefaults

我是新來的斯威夫特和iOS開發作爲一個整體,所以如果有人能友好地指導我我會朝着正確的方向非常感謝。

我知道如何設置收藏夾按鈕的圖像,以改變它是否已被設置爲收藏夾,我還注意到它表明我把收藏夾放在UITableViewController。我的應用程序目前正在使用UITabBarController,其中有4個不同的ViewControllers

如果你想我的故事板的截圖更好地瞭解,請讓我知道,我會更新帖子,還需要進行任何代碼,請讓我知道,再一次,我將更新帖子!

編輯:我會很樂意添加一個按鈕,按下該按鈕負載時表視圖,如果有人知道如何添加一個普通按鈕進入,所以當把它壓表視圖顯示收藏夾

編輯2:圖片 What i would like to happen

+0

請發佈一些代碼,你已經嘗試過,所以它明確你想要什麼。據我所知,你想製作一個最喜歡的聲音列表,並查看這個喜愛的列表,當用戶按最喜歡的部分? –

+0

檢查我的更新請:) – Konsy

回答

1

嘗試做如下 -

  1. 取具有一個viewController作爲soundsViewController和另一tableViewControllerfavouritesTableViewController示爲低於UITabBarController圖像 -

enter image description here

  • 現在將這些示例代碼添加到soundsViewController -

    var favListArray:NSMutableArray = [] 
    
    @IBOutlet weak var tableView: UITableView! 
    
    override func viewWillAppear(animated: Bool) { 
    
        super.viewWillAppear(animated) 
    
        if NSUserDefaults.standardUserDefaults().objectForKey("favList") != nil { 
    
         favListArray = NSMutableArray.init(array: NSUserDefaults.standardUserDefaults().objectForKey("favList") as! NSMutableArray) 
    
        } 
    
    } 
    override func viewDidLoad() { 
    
        super.viewDidLoad() 
    
        // Do any additional setup after loading the view. 
    } 
    
    override func didReceiveMemoryWarning() { 
        super.didReceiveMemoryWarning() 
        // Dispose of any resources that can be recreated. 
    } 
    
    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
        // #warning Incomplete implementation, return the number of sections 
        return 1 
    } 
    
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
        // #warning Incomplete implementation, return the number of rows 
        return 10 
    } 
    
    
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    
        let cell = tableView.dequeueReusableCellWithIdentifier("soundCell", forIndexPath: indexPath) as! TableViewCell 
    
        cell.titleLbl.text = NSString.localizedStringWithFormat("Sound %d", indexPath.row) as String 
    
        if favListArray.containsObject(cell.titleLbl.text!) { 
    
         cell.addTOFVrtBtn.setTitle("-", forState: UIControlState.Normal) 
    
        }else{ 
    
         cell.addTOFVrtBtn.setTitle("+", forState: UIControlState.Normal) 
        } 
    
        cell.addTOFVrtBtn.tag = indexPath.row 
    
        cell.addTOFVrtBtn.addTarget(self, action:#selector(addToFav) , forControlEvents: UIControlEvents.TouchUpInside) 
    
        return cell 
    
    } 
    
    func addToFav(sender:UIButton) { 
    
        let cell = self.tableView.cellForRowAtIndexPath(NSIndexPath.init(forRow: sender.tag, inSection: 0)) as! TableViewCell 
    
        if favListArray.containsObject(cell.titleLbl.text!) { 
    
         favListArray.removeObject(cell.titleLbl.text!) 
    
        }else{ 
    
         favListArray.addObject(cell.titleLbl.text!) 
        } 
    
        tableView.reloadData() 
    
        NSUserDefaults.standardUserDefaults().setObject(favListArray, forKey: "favList") 
    
    } 
    
  • 這些是示例代碼,這裏TableViewCell是具有titleLbladdTOFvrtBtnUITableViewCell的子類。

  • 添加以下示例代碼favouritesTableViewController -
  • varfavSoundList:NSMutableArray = []

    override func viewWillAppear(animated: Bool) { 
    
    super.viewWillAppear(animated) 
    
    if NSUserDefaults.standardUserDefaults().objectForKey("favList") != nil { 
    
    favSoundList = NSMutableArray.init(array: NSUserDefaults.standardUserDefaults().objectForKey("favList") as! NSMutableArray) 
    
    print(favSoundList) 
    
    self.tableView.reloadData() 
    
    } 
    
    } 
    
    override func viewDidLoad() { 
    
        super.viewDidLoad() 
    
    } 
    
    override func didReceiveMemoryWarning() { 
    
        super.didReceiveMemoryWarning() 
    
        // Dispose of any resources that can be recreated. 
    
    } 
    
    // MARK: - Table view data source 
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    
        // #warning Incomplete implementation, return the number of sections 
    
        return 1 
    
    } 
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    
        // #warning Incomplete implementation, return the number of rows 
    
        return favSoundList.count 
    
    } 
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 
    
        cell.textLabel?.text = favSoundList.objectAtIndex(indexPath.row) as? String 
    
        return cell 
    
    } 
    

    這裏是O/P畫面人口統計學

    enter image description here

    我希望這會幫助你,或者你可以得到一個主意如何使收藏夾列表和收藏夾部分..謝謝

    +0

    兄弟在我的代碼聲音viewcontrollers是正常的VC,在這我從storyBoard添加tableView ..和最喜歡的視圖控制器是UITableViewController .. –

    +0

    好吧,爲此賦予每個+ btn不同的標籤值,並添加普通的IBAction到所有btn ie addToFav並將聲音名稱保存在數組中。 –

    +0

    和使用tableView非常容易,您應該嘗試使用tableView進行列表,因爲如果您的聲音列表增加,則不必手動添加更多按鈕,只需重新使用tableView單元即可。 –

    1

    嗨...我想你想你的主視圖中創建一個tabView。請分享你的編碼(背景音樂)在swift中創建tabview是非常簡單的方法。

    第1步:選擇mainView Controller,然後去編輯 - >導航器 - >中嵌入。

    第2步:選擇Navigation Controller,然後再去編輯器 - >嵌入在 - >的TabBar控制器。

    步驟3:將新UIViewController(假設名字作爲項目2)到您的storyBoard並選擇它去編輯 - >嵌入在 - >導航控制器。

    第4步:選擇TabBar controller右鍵單擊它。您應該看到View Controllers連接低於觸發Segues。項目1是已經連接,讓我們的ITEM2 Navigation Controller連接爲點擊在物品1或者直接按控制+左擊「四捨五入+」圖標拖到項目2導航控制器的連接。

    類似,你可以讓幾個標籤欄項目,它單獨視圖控制器的方式相同。

    你願意做最喜歡的圖標標籤欄,然後在導航器中選擇你的圖標,去大小督察公用事業,則更改系統項目到收藏夾標籤欄項目節。

    如果當你想只需添加以下下面viewDidLoad中()像如下編碼喜歡隱藏標籤欄,

    override func viewDidLoad() { 
        super.viewDidLoad() 
    
        self.hidesBottomBarWhenPushed = true 
    } 
    

    或者 在segue

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
          let ident = segue.destinationViewController as! FavouritesViewController // FavouritesViewController.Swift 
    
          ident.hidesBottomBarWhenPushed = true // Hides the Tab Bar 
    
         } 
    
        } 
    

    Final ScreenShot

    +0

    謝謝你非常詳細的答案,但我知道如何使表視圖控制器等,但我問我如何能有它,所以當用戶按下按鈕時,它增加按鈕到最喜愛的部分 – Konsy

    0

    不要把它想成favouriting一個按鈕,一個按鈕,你只是如何在你的應用程序中顯示數據 - 你真正favouriting是數據本身,所以在這種情況下,特定的聲音文件。

    因此,您當前的數據是聲音文件的列表或這些文件的路徑。您的收藏夾列表可以完全相同。我想你可能只是簡單地從磁盤獲取文件列表來顯示,這樣你的收藏夾列表就需要以不同的方式存儲。這可能是用戶默認或plist文件,無論是它是一個字符串數組,並且都是存儲數組的簡單選項。

    當存儲您剛纔設置的數組默認用一個密鑰,或將其寫入文件。當您回讀時,您應該從用戶默認值中讀取數據,然後製作mutableCopy或使用NSMutableArray來讀取文件,以便之後有可編輯的實例,並且可以從列表中添加和刪除收藏夾。

    您使用按鈕來表示聲音文件的方法很可能是一個很大的代碼和努力比你需要。表視圖是專門設計用於顯示事物列表的,並且沒有任何理由表視圖看起來不像按鈕列表(雖然更靈活,代碼更少)。

    +0

    我會怎麼做呢?請檢查我的編輯瞭解更多信息! – Konsy

    +0

    所以點擊最喜歡的按鈕添加或刪除列表中的聲音文件路徑(並更新按鈕UI)。它不會把你帶到另一個屏幕。收藏夾表格可能是您的標籤控制器中的另一個選項卡。 – Wain

    +0

    要獲得收藏夾,將會有一個按鈕說收藏夾,然後將加載TableView。這是否更有意義? – Konsy

    相關問題