Học lập trình ứng dụng iphone: Tạo list layout bằng TableView 5 tháng 4 tuần trước #4081

  • huonggiang123
  • huonggiang123's Avatar
  • Offline
  • New Member
  • Tổng số bài viết: 16
  • Điểm khen ngợi: 0
Kế tiếp Theo các bài viết:
- tạo ứng dụng login
- tạo listview 2 cột bằng collectionview
- Tạo hiệu ứng bấm trên một cell của collectionview và link tới trang mới bằng swift 4

Ta tiếp tục ứng dụng với phần sử dụng tableView

Bước 1:

Kéo thả 1 ViewControl mới. Trên control này ta thiết kế thêm các control khác, và kéo thả 1 tableView vào. Tiếp tục kéo thả 1 tableviewCell vào bên trong tableView như hình sau:


Ta tiếp tục kéo 3 label vào bên trong cell.
Bước 2:

Tạo một file mới loại Cocoa Class, chọn kế thừa lớp UITableViewCell. Mở màn hình giao diện assistance, kéo thả các control bên trong cell vào lớp này để khai báo.
Sau đó ra lại giao diện Main.storyboard, chọn TableViewCell, bên menu bên phải chọn Identity Inspector, chọn class là tên class trong file mình vừa tạo.
Nội dung file vừa tạo:
import UIKit
class Goidichvu {
    
    //MARK: Properties
    
    var idgoi: Int
    var tengoi: Int
    var giagoi: Int
    
init()
    {
        self.idgoi = 0
        self.tengoi=0
        self.giagoi = 0
    }
    init?(idgoi: Int, tengoi: Int ,giagoi: Int) {
        
     
        
        // Initialize stored properties.
        self.idgoi = idgoi
        self.tengoi = tengoi
        self.giagoi = giagoi
        
        
    }
}

Bước 3:

Tạo 1 lớp mới kế thừa lớp UIViewCOntroller. Từ giao diện Main.StoryBoard, chọn menu Identity Inspector, chọn class và đặt tên cho storyboard ID như hình



Nội dung của file đó là:
import UIKit
import Alamofire
class CaidatgoiController: UIViewController, UITableViewDataSource,UITableViewDelegate {
   
    @IBOutlet weak var tbview: UITableView!
    
    
    var listgoi:[Goidichvu] = []
    //var listgoi = [Goidichvu]()
    let defaultValues = UserDefaults.standard
    let URL = "https://cuoituan.vn/blog/noptien/get_goidichvu1.php"
     var refresher: UIRefreshControl!
    @IBOutlet weak var txtGiagoi: UITextField!
    @IBOutlet weak var txtTengoi: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        self.laythongtin()
        self.thietlapnavigate()
        
        self.tbview.dataSource = self
        self.tbview.delegate = self
        // Swift
        self.tbview.tableFooterView = UIView(frame: .zero)
        
        // Do any additional setup after loading the view.
    }
    func thietlapnavigate()
    {
        // Do any additional setup after loading the view.
        
    //    let backButton = UIBarButtonItem(title: "Nộp tiền online", style: UIBarButtonItem.Style.plain, target: navigationController, action: nil)
      //  navigationItem.leftBarButtonItem = backButton
        
        //getting user data from defaults
        let defaultValues = UserDefaults.standard
        if (defaultValues.string(forKey: "ten") == nil ){
            
            //send back to login view controller
            let viewController = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
            self.navigationController?.pushViewController(viewController, animated: true)
        }
    }
    func laythongtin() {
        listgoi = [Goidichvu]()
        let dienthoai = defaultValues.string(forKey: "dienthoai")
            let parameters: Parameters=[
                "dienthoai":dienthoai!
            ]
            
            //making a post request
            Alamofire.request(URL, method: .post, parameters: parameters).responseJSON
                {
                    response in
                    //printing response
                    print(response)
                    
                    //getting the json value from the server
                    if let result = response.result.value {
                        if (String(describing:type(of: result)) == "__NSCFNumber")
                        {
        //                    self.lbthongbao.text = "mật khẩu củ không đúng"
                        }
                        else
                        {
                            
                            let jsonDs = result as! NSDictionary
                            
                            //if there is no error
                            if((jsonDs.value(forKey: "ds") != nil)){
                                
                                let jsonDatas = jsonDs.value(forKey: "ds") as! [NSDictionary]
                                for jsonData in jsonDatas
                                {
                                    let idgoi = (jsonData.value(forKey: "idgoi") as! NSString).intValue
                                    let tengoi = (jsonData.value(forKey: "tengoi") as! NSString).intValue
                                    
                                    let giagoi = (jsonData.value(forKey: "giagoi") as! NSString).intValue
                                    let goidv_tam = Goidichvu(idgoi: Int(idgoi),tengoi: Int(tengoi),giagoi: Int(giagoi))
                                    self.listgoi.append(goidv_tam!)
                                    
                                }
                                print (self.listgoi.count)
                                //thong bao dang nhap lai
                                //let goidv_tam = jsonData.value(forKey: "Goidichvu") as! Goidichvu
                               // self.listgoi.append( goidv_tam)
                                self.tbview.reloadData()
                        //        self.refresher.endRefreshing()
                                
                            }
                        }
                    }
            }
            
            
        
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return listgoi.count
        
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "itemTableViewCell", for: indexPath) as! itemTableViewCell
        let mylbgiaint = listgoi[indexPath.row].giagoi.formattedWithSeparator
        cell.lbten.text  = mylbgiaint
        let mylbtenint = listgoi[indexPath.row].tengoi.formattedWithSeparator
        cell.lbgia.text = mylbtenint
        cell.lbstt.text = String(indexPath.row+1) + "."
        
        if cell.selectedBackgroundView == nil{
            cell.selectedBackgroundView = UIView()
        }
        cell.selectedBackgroundView?.backgroundColor = UIColor.brown
        return cell
    }
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }
    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        let delete = UITableViewRowAction(style: .destructive, title: "Xoá") { (action, indexPath) in
            // delete item at indexPath
            print("xoa")
            print ( indexPath.row)
        }
        
        let share = UITableViewRowAction(style: .normal, title: "Cập nhật") { (action, indexPath) in
            // share item at indexPath
            print("capnhat")
            print ( indexPath.row)
        }
        
        share.backgroundColor = UIColor.blue
        
        return [delete, share]
    }
    
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if (editingStyle == .delete) {
            // handle delete (by removing the data from your array and updating the tableview)
        }
        if(editingStyle == .insert)
        {
        }
    }

    
    @IBAction func Luu(_ sender: UIBarButtonItem) {
    }
    
    @IBAction func Huy(_ sender: UIBarButtonItem) {
    }
    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

}
extension Formatter {
    static let withSeparator: NumberFormatter = {
        let formatter = NumberFormatter()
        formatter.groupingSeparator = "."
        formatter.numberStyle = .decimal
        return formatter
    }()
}

extension BinaryInteger {
    var formattedWithSeparator: String {
        return Formatter.withSeparator.string(for: self) ?? ""
    }
}

Vậy là hoàn thiện chúng ta chạy thử sẽ có ứng dụng với giao diện sau.
Chú ý các biến trong file COntroller phải thực hiện bằng biện pháp kéo thả chứ không copy code.

Không cho phép Khách viếng thăm viết bài.

quang cao daklak

Bài đăng mới nhất