2016-09-06 4 views
1

問題文: 新しいカスタムUITableViewCellに "、"で区切られたテキストを表示したいとします。UITableViewの新しいUITableViewカスタムセルに "、"で区切られたテキストを分割する方法

問題:以下に示すように、単一行のカスタムセルにすべてのデータを複数行のプロパティで表示します。

enter image description here

私はこの方法のようにtableViewを表示したいです。上のスクリーンショットに示すように

enter image description here

は、今私は、それぞれの新しいカスタムセルに「」で区切られたデータの上に表示しようとしているが、それは唯一の第一のデータを表示し、残りのデータをスキップし、私のコードあたりとして。

let Meaning :String = "Aback,Abacus,Abandon,Able,Aboard" 
let Smeaning :String = "Fabric,Habit,keen,Pace" 

func tableView(tableViewData: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableViewData.dequeueReusableCellWithIdentifier("cell")! as! StudentCell 

    let fmeaning = Mmeaning.characters.split{$0 == ","}.map(String.init) 
      let smeaning = Hmeaning.characters.split{$0 == ","}.map(String.init) 

    for var i = 0; i < fmeaning.count; i += 1{ 
     print(fmeaning[i]) 
     //Here it prints all values perfectly 
    } 
    for var i = 0; i < smeaning.count; i += 1{ 
     print(smeaning[i]) 
     //Here it prints all values perfectly 
    } 

問題は二つの文の下にここに起こる:それは別の新しいカスタムセルにデータを表示するように私は、これら2つのカスタムセルにArrayを割り当てる必要がありますどのようにUITableView

cell.lblMeaning1.text = fmeaning[indexPath.row] 
    cell.lblMeaning2.text = smeaning[indexPath.row] 
    return cell; 
} 

にのみ第一の値を表示?

+0

セルの高さはどれですか? – user1232690

+0

私はこの関数を使用していますheightForRowAtIndexPath –

+0

@Ashishどちらの配列にも等しい要素がありますか? –

答えて

1

、また、あなたはそれがあなたのviewControllerで、このような配列のあなたの2つのインスタンスを宣言するために、viewDidLoadでこの計算を行い、その後、tableViewをリロードする必要があります。

var languageDic = [String: [String]]() 
var allLanguage = [String]()  

override func viewDidLoad() { 
    super.viewDidLoad() 
    let mMeaningArray = Mmeaning.characters.split{$0 == ","}.map(String.init) 
    let hMeaningArray = Hmeaning.characters.split{$0 == ","}.map(String.init) 
    self.languageDic = ["Marathi Meaning": mMeaningArray,"Hindi Meaning": hMeaningArray] // You can add other langaue in the dic sam way I have added this two 
    self.allLanguage = Array(self.languageDic.keys) as [String] 
    self.tableView.reloadData() 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return self.allLanguage.count 
} 

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String { 
    return self.allLanguage[indexPath.section] 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {   
    return self.languageDic[self.allLanguage[section]].count 
} 

func tableView(tableViewData: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableViewData.dequeueReusableCellWithIdentifier("cell")! as! StudentCell 
    let str = self.languageDic[self.allLanguage[indexPath.section]][indexPath.row] 
    cell.lblMeaning1.text = str 
    return cell 
} 

注:cellForRowAtIndexPathで一つだけのラベルを必要としています。

編集:より多くの要素を持つ配列の数を返す場合は、このようにすることができます。 F

var mMeaningArray = [String]() 
var hMeaningArray = [String]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.mMeaningArray = Mmeaning.characters.split{$0 == ","}.map(String.init) 
    self.hMeaningArray = Hmeaning.characters.split{$0 == ","}.map(String.init) 
    self.tableView.reloadData() 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {   
    return (self.mMeaningArray.count > self.hMeaningArray.count)? self.mMeaningArray.count : self.hMeaningArray.count 
} 

func tableView(tableViewData: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableViewData.dequeueReusableCellWithIdentifier("cell")! as! StudentCell 
    if indexPath.row < self.mMeaningArray.count { 
     cell.lblMeaning1.text = self.mMeaningArray[indexPath.row] 
    } 
    else { 
     cell.lblMeaning1.text = "" 
    } 
    if indexPath.row < self.hMeaningArray.count { 
     cell.lblMeaning2.text = self.hMeaningArray[indexPath.row] 
    } 
    else { 
     cell.lblMeaning2.text = "" 
    } 
    return cell 
} 
+0

まだ、いくつかの動作はしていますが、cellForRowAtIndexPathでは、この関数は "section"にアクセスできませんので、 "if-statement"を1つだけ実行しました。そして私は結果を垂直に2つの別々の列に必要とします。私は両方の列の結果を一度に表示したい。 –

+0

@Ashishそれは私の間違いでしたが、 'indexPath.'を追加するのを忘れました。編集した回答を確認してください。また、複数の言語を表示したい場合は、必要に応じて動的セクションで回答を更新します。 –

+0

はい、確かに、私は問題文のスクリーンショットに表示されているように、多言語の回答が必要です。これは、tableViewのようなヒンディー・マラーティーの列に似ています。 –

0

関数は、fmeaning.countsmeaning.countを返す必要があります。正しい行番号を使用するテーブルを決定するには、ifを入力します。

また、fmeaningをテーブルビューのセクションとして表示し、smeaningをセルとして表示します。あなたはtableViewとセクションテーブルを使用する必要があることについては

+0

"numberOfRowsInSection"関数で両方の値を返す方法と、両方をセルとして表示する必要があります。 –

関連する問題