Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
1.8k kez görüntülendi
ios development kategorisinde tarafından

merhabalar arkadaslar, 

uygulamada sqlite veri tabani kullaniyorum. veri tabaninda 'yerler' (yer_id, yer_adi) ve 'yerlerin_detayi' (detay_id, yer_id, detay_adi ) adinda iki tablo var. uygulamanin icine yapilari olusturarak yerler.swift ve yerDetay.swift olarak iki sinif olusturdum iclerine storyboard'da tableview ekleyip gerekli baglantilarini kurdum. 

ilk olarak yerler ekrani aciliyor burdaki yerleri tableview'da listeledim. sorun su; yerler ekraninda bir secim yaptigimda 'yer_id'=1 olan eleman secildiginde yerDetay ekranina segue baglantisiyla gidilecek ve burada 'yerlerin_detayi' tablosundaki yer_id=1 olanlar yerDetay ekranindaki table view'da listelenecek. Bunu nasil yapacagin hakkinda yardimci olabilirseniz sevinirim.

yerler.swift sinifinda asagidaki yapi ile listelemeyi yaptim. didSelectRowAtIndexPath ve prepareForSegue metotlarinida olusturmam gerektigini dusunuyorum. ancak bilgi seviyem neticesinde buraya kadar gelebildim

  1. import UIKit
  2.  
  3. class CategoryViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
  4. @IBOutlet var table:UITableView!
  5. var data = [Category]()
  6. let db = SQLiteDB.sharedInstance()
  7.  
  8. override func viewDidLoad() {
  9.         super.viewDidLoad()
  10.     }
  11.  
  12. override func viewWillAppear(animated: Bool) {
  13.         super.viewWillAppear(animated)
  14.         data = Category().allRows("name ASC")
  15.         table.reloadData()
  16.     }
  17.  
  18. override func didReceiveMemoryWarning() {
  19.         super.didReceiveMemoryWarning()
  20.     }
  21.  
  22. // UITableView Delegates
  23. func tableView(tv:UITableView, numberOfRowsInSection section:Int) -> Int {
  24.         let cnt = data.count
  25.         return cnt
  26.     }
  27.  
  28. func tableView(tv:UITableView, cellForRowAtIndexPath indexPath:NSIndexPath) -> UITableViewCell {
  29.         let cell = tv.dequeueReusableCellWithIdentifier("CategoryCell")!
  30.         let cat = data[indexPath.row]
  31.         cell.textLabel?.text = cat.name
  32.         return cell
  33.     }
  34. }

2 Cevaplar

+2 oy
tarafından
tarafından seçilmiş
 
En İyi Cevap

tableView'in navigationController kullanılarak bir detailView'le nasıl kullanılabileceğine ilişkin basit bir örnek hazırladım. aşağıdaki link üzerinden indirip inceleyebilirsiniz.

hazırladığım örnekde sql veri tabanı kullanmak yerine basit bir array, dictionary yapısı kullandım.
umarım açıklayıcı olur.

https://drive.google.com/file/d/0B_33To7xgYO7eGZ4Mkt2RTdlcFk/view?usp=sharing

tarafından
Tesekkur ederim oncelikle. sizin yapida personel listesi ekraninda sorunum yok ancak personel detay sayfasinda sıkınti yasıyorum. sizin yapi uzerinden anlatacak olursam. örnegin; personel 1'e basildiginda açılacak table view ekraninda personel id'si 1 olanın bilgileri tableview'da listelenecek. bu yapıyı kurmaya çalışıyorum.
tarafından
yani personel detay sayfasında ikinci bir tableView olacak ve personel bilgileri bu tableView içerisinde listelencek. Doğrumu anlıyorum?
tarafından
evet sizin uygulama uzerinden gidecek olursak öyle olacak. veri tabanindan personel listeletmede sorunum yok ama secilen personele ait bilgileri personel detayda tableview'a listeletemiyorum. :?
tarafından
o halde verdiğim örnekte DetailViewController.swift içerisindeki tüm kodları, aşağıda verdiğim kodlarla değiştirirseniz istediğiniz sonuca ulaşabilirsiniz.



import UIKit

class DetailViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var selectedPersonalData:Dictionary<String,AnyObject>! = nil
    var tableView:UITableView! = nil
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.greenColor()
        self.title = "personel detayı"
        self.tableView = UITableView(frame: self.view.frame)
        self.tableView.backgroundColor = UIColor.clearColor()
        self.tableView.delegate = self
        self.tableView.dataSource = self
        self.tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine
        self.tableView.separatorInset = UIEdgeInsetsZero
        self.tableView.allowsMultipleSelection = false
        self.tableView.allowsMultipleSelectionDuringEditing = false
        self.tableView.allowsSelectionDuringEditing = false
        self.tableView.allowsSelection = false
        self.view.addSubview(self.tableView)
    }
    
    override func viewDidDisappear(animated: Bool) {
        self.selectedPersonalData = nil
        self.tableView.reloadData()
    }
    
    override func viewWillAppear(animated: Bool) {
        self.tableView.reloadData()
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if self.selectedPersonalData != nil {
            return self.selectedPersonalData.count
        } else {
            return 0
        }
    }
    
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 50
    }
    
    func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        return false
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var Identifier:String = "cellid"
        var myCell:UITableViewCell! = nil
        if var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(Identifier) as? UITableViewCell {
            myCell = cell
        } else {
            myCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: Identifier)
        }
        var rowLabel:String = ""
        switch indexPath.row {
        case 0:
            if let id:Int = self.selectedPersonalData["id"] as? Int {
                rowLabel = String(format: "personel no: %i", id)
            }
        case 1:
            if let name:String = self.selectedPersonalData["name"] as? String {
                rowLabel = String(format: "adı: %@", name)
            }
        case 2:
            if let lastname:String = self.selectedPersonalData["lastname"] as? String {
                rowLabel = String(format: "soyadı: %@", lastname)
            }
        case 3:
            if let birthday:String = self.selectedPersonalData["birthday"] as? String {
                rowLabel = String(format: "doğum yılı: %@", birthday)
            }
        default:
            break
        }
        myCell.textLabel?.textColor = UIColor.blackColor()
        myCell.textLabel?.font = UIFont(name: "Arial", size: myCell.frame.size.height * 0.4)
        myCell.textLabel?.text = rowLabel
        return myCell
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
tarafından
çok teşekkur ederim yardimlariniz ve ayirdiginiz vakit icin. :)
tarafından
ricaederim. kolay gelsin. :)
+2 oy
tarafından

Merhaba,

Daha öncelerde yapmış olduğum bir uygulamam var mantık şu şekilde örnek olarak cihazları bi tableview ekranın da listeliyorum ve bu liste içinden bir cihaza tıkladığım zaman başkabir view e giderek cihaza ait bilgileri gösteriyor yanlış anlamadıysam sendeki yapıda aşağı yukarı böyle yapıyı zaten kurdğunu söylüyorsun bende tableview kısmını paylaşıyorum. Umarım yardımcı olur.

var selected:Int = 0

func numberOfSectionsInTableView(tableView: UITableView) -> Int {

    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return  myDevices.count

}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

    cell.textLabel?.text = (JC.myDevices[indexPath.row]["name"] as? String)! + " - " + (JC.myDevices[indexPath.row]["location"] as? String)!
    print(JC.myDevices[indexPath.row]["name"] as! String)

    // bu arada name ve locationa göre table view e yazdırıyorum

    return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    tableView.deselectRowAtIndexPath(indexPath, animated: true)
    selected = indexPath.row
    print(selected)

}

---------------- myDevices bir dizi ve başa bir view Controlde oluşturuldu Json ile cihazlar parse ediyor ------------------------

//Kodun bir kısmı anlamak açısından

var myDevices:NSArray = []

if let parseJSON = json{

                        self.myDevices = parseJSON["devices"] as! NSArray
                        print(self.myDevices[0]["name"])

                    }
tarafından
verdiginiz bilgiler icin tesekkur ederim oncelikle. yapilarin mantiklari  hemen hemen ayni yalniz. sizin sistemdeki gibi cihaza tikladiginizda cihaza ait ozelliklerin gosterildigi sayfada cihazin ozellikleride tableview'da listelenmesini istiyorum.
tarafından
Bendeki yapı aşağıdaki gibi tableview de ilgili cihaza tıkladıktan sonra o cihazla ilgili bilgileri viewDidLoad anında ekrandaki text lere  yazıyorum bu mantıkta sizde bir tableview oluşturup bilgileri oraya yazdırırsanız sanırım olur istediğiniz eğer doğru anlaşabildiysek :)

override func viewDidLoad() {

       
        txtCihazAdi.text = (JC.myDevices[selected]["name"] as? String)!
        txtCihazKonumu.text = (JC.myDevices[selected]["location"] as? String)!
        

}
tarafından
anlaştık hocam. :) sizin mantikla uzerine gittim. Yasin bey'de kodu yukarida vermis zaten halloldu simdi :)
...