2017-08-21 3 views
0

私のXcodeプロジェクトでは、Snapchatの「Send To ...」画面(スクリーンショットを添付しました)のような表示をしたいと思います。私はすでにテーブルビューを作成してそれを設定し、複数の選択を許可しました。SnapchatのようなテーブルビューSend Feature(Multiple Selection and Swipeable Label)

1)多重選択:私が望むセルを選択できますが、検索バーをタップして入力を開始すると、前の選択はすべて消えます。私は、配列内のすべての名前を追加する必要があると仮定して、何らかの形で配列を通知するので、このユーザー名が配列に含まれているかどうかを確認してから、テーブルビューで選択します。しかし、私はそれをどうやって行うのか分かりません。 どうすればいいですか?

2)下のバー(写真では青)に送信:あなたが知っているかもしれませんが、あなたがにスナップを送信したいユーザーに押すと、その名前がでバーに追加されますSnapchatで、あなたが追加した名前を水平にスクロールすることができるので、あなたがバーをいっぱいにして、それをスワイプできるからです。私は配列に名前を付け加え、その配列のようなラベルに配列を表示できますが、ユーザーが水平にスクロールできるようにする方法はわかりません。 この同じ機能を実装するにはどうすればよいですか?

すべての質問にお気軽にお問い合わせください。あなたはそれらのすべてを行う必要はありません、私は彼らに答えが必要です。ここに私のコードは、これまでのところです:

class User {   
     var userID:String? 
     var userFullName:String? 
     var userUsername:String? 
     var userProfileImage:PFFile? 
     var isPrivate:Bool 

     init(userID : String, userFullName : String, userUserName : String, userProfileImage : PFFile, isPrivate : Bool) { 
      self.userID = userID 
      self.userFullName = userFullName 
      self.userUsername = userUserName 
      self.userProfileImage = userProfileImage 
      self.isPrivate = isPrivate 
     } 
    } 

var userArray = [User]() 
    func loadFriends() { 
      //STEP 1: Find friends 
      let friendsQuery = PFQuery(className: "Friends") //choosing class 
      friendsQuery.whereKey("friendOne", equalTo: PFUser.current()?.objectId ?? String()) //finding friends 
      friendsQuery.limit = self.page //number of users intitally showing 
      friendsQuery.findObjectsInBackground (block: { (objects, error) -> Void in 
       if error == nil { //if no error 

        //clean up 
        self.friendsArray.removeAll(keepingCapacity: false) 

        //STEP 2: Find related objects depending on query setting 
        for object in objects! { 
         self.friendsArray.append(object.value(forKey: "friendTwo") as! String) //hold array info of friend 
        } 

        //STEP 3: Find friend info 
        let query = PFUser.query() 
        query?.whereKey("objectId", containedIn: self.friendsArray) 
        query?.addDescendingOrder("createdAt") //how to order users 
        query?.findObjectsInBackground(block: { (objects, error) -> Void in 
         if error == nil { 

          for object in objects! {        
           var user : User 

          let fullname = (object.value(forKey: "fullname") as! String) 
          let username = (object.object(forKey: "username") as! String) 
          let profilePhoto = (object.object(forKey: "profilePhoto") as! PFFile) 
          let objectID = (object.objectId!) 
          let isPrivate = (object.object(forKey: "isPrivate") as! Bool) 

          user = User(userID: objectID, userFullName: fullname, userUserName: username, userProfileImage: profilePhoto, isPrivate: isPrivate) 
          self.userArray.append(user) 
          } 
          self.tableView.reloadData() 
         } else { 
          print(error!) 
         } 
        }) 
       } else { 
        print(error!) 
       } 
      }) 
     } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
      let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! FriendCell 
      let user = userArray[indexPath.row] 

     //add user info to cells 
     cell.fullnameLabel.text = user.userFullName 
     cell.usernameLabel.text = user.userUsername 
     cell.objectID = user.userID! 
     cell.isPrivate = user.isPrivate 
     user.userProfileImage?.getDataInBackground (block: { (data, error) in 
      if error == nil { 
       cell.profilePhoto.image = UIImage(data: data!) 
      }    
     })     
       }) 
    } 

enter image description here

答えて

1

1)複数選択: は、あなたが代わりに各プロパティのarrayを維持するためのユーザーのプロパティを保持しているUserクラス(例えばユーザ)を持っている必要があります。ユーザーオブジェクトをArrayに保存します。ユーザークラスは次のようになります。

class User { 

    var userID:String 
    var userFullName:String 
    var userName:String 
    var userProfileImageUrl:String 

    init(userID:String,userFullName:String,userName:String,userProfileImageUrl:String) { 
     self.userID = userID 
     self.userFullName = userFullName 
     self.userName = userName 
     self.userProfileImageUrl = userProfileImageUrl 
    } 
} 

ユーザー拡張があり、そのユーザーが選択されているかどうかを確認することができます(例:isSelected)。

import UIKit 
import Foundation 

private var selectedKey: UInt8 = 0 
extension User { 
    var isSelected:Bool{ 
     get { 
      return objc_getAssociatedObject(self, &selectedKey) as! Bool 
     } 
     set { 
      objc_setAssociatedObject(self, &selectedKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) 
     } 
    } 
} 
あなた func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCellチェックで今

user.isSelected == true/falseいるし、それに応じて選択/選択解除画像を更新します。 と下部バーへの送信)isSelected

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

2の値を更新します。下のバーのためにUIViewでサブビューとしてUICollectionViewを追加します。 UILabelを保持するUICollectionViewCellをオーバーライドするクラスを作成します。 をUICollectionViewに追加できます。

私はちょうどあなたからの助けになると思います。

+0

ユーザークラスを正確に使用するにはどうすればよいですか?私は初心者のコーダーであり、以前はこれを使用していませんでした。私はすでにur {class User ...}をコードに入力していますが、私が 'loadfriends()'関数に行ったときにクラスのどれにもオブジェクトを追加することはできません – fphelp

+2

私が言ったように、アイデアから始める。それが私の答えを受け入れるべきであるよりもあなたに役立つなら、私はあなたをさらに助けることができます。 – Torongo

+0

私はあなたの答えを受け入れ、あなたの助けをしたいと思います。 loadFriends()関数から受け取ったデータをどのように追加するのですか? – fphelp

0

私は、tableView内のすべてのセルのブールチェックを設定すると思います。セルが再度ロードされると、チェックが表示されません。なぜなら、それは偽であるからです。

関連する問題