2015-06-22 7 views
0

Я пытаюсь заполнить табличный вид двумерным массивом (struct). У меня есть класс «Тег», который состоит из двух строк и хранится в основных данных, и «TagManager», который управляет тегами. Первая часть массива будет одной строкой в ​​виде имени группы, которая разделит разделы табличного представления, а вторая часть будет тегом, для чего мне нужно будет использовать только одну из строк этого тега. Я застрял, связывая каждый тег с его группой. Если бы кто-нибудь мог предложить мне способ разрешить выделение тегов группе или увидеть лучшее решение моей проблемы, мы будем очень благодарны! Спасибо.2-й массив в виде таблицы swift

class TagsManager { 

struct Group { 

var name: String! 
var tags: [Tag] 
} 
//Sone tagsManager functions here 


func findByGroup(tagLabel: String) -> [Tag] { 
    var fetchRequest = NSFetchRequest(entityName: Tag.EntityName) 
    fetchRequest.predicate = NSPredicate(format: "tagName = %@", tagLabel) 

    return managedObjectContext.executeFetchRequest(fetchRequest, error: nil) as? [Tag] ?? [Tag]() 
} 


func findAllByGroup() -> [Group] { 

    var unsortedFindAll = findAll() 
    var groupNames = Set<String>() 

    for tag in unsortedFindAll { 
     groupNames.insert(tag.tagName) 

    } 
    var results = [Group]() 
    for groupName in groupNames { 
     let groupTags = findByGroup(groupName) 
      let group = Group(name: groupName, tags: groupTags) 
      results.append(group) 
    } 
    return results 
} 

func findAll() -> [Tag] { 
    let fetchRequest = NSFetchRequest(entityName: Tag.EntityName) 
    let sortDescriptor = NSSortDescriptor(key: "tagName", ascending: true) 

    fetchRequest.sortDescriptors = [sortDescriptor] 

    // TODO: Check what happens if the array is empty 
    return managedObjectContext.executeFetchRequest(fetchRequest, error: nil) as? [Tag] ?? [Tag]() 
} 


} 

class IndividualAnimalTableViewController: UITableViewController, UITextFieldDelegate, UITextViewDelegate, UIAlertViewDelegate, SDLStickReaderListener, StickReaderDelegate, UITabBarControllerDelegate { 

var groupsKnown = [Group]() 



override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?{ 
     return self.groupsKnown[section].name 
} 


func fetchKnownTags() { 
    groupsKnown = knownTagManager.findAllByGroup() 
    tagsKnown = knownTagManager.findAll() 
} 

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

} 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Potentially incomplete method implementation. 
    // Return the number of sections 
    return groupsKnown.count 
} 


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("textInputCell", forIndexPath:indexPath) as! TagCell 
     if self.tagsKnown.count != 0 { 
      fetchKnownTags() 

      let tag = self.tagsKnown[indexPath.row] 
      let group = self.groupsKnown[indexPath.section] 
      //return other cells 
      self.deleteButton.hidden = false 
      cell.TagNumberTxt.font = StoryBoard.myFont 
      cell.TagNumberTxt.textColor = StoryBoard.cellColour 
      //Not sure how to handle this part// 
      cell.TagNumberTxt.text = "" 
     } 
     return cell 
    } 

ответ

2

Для тех, кто хочет ответить на этот вопрос, я нашел решение.

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?{ 
     return sortedGroups[section].name 
} 


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

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

     let cell = tableView.dequeueReusableCellWithIdentifier("textInputCell", forIndexPath:indexPath) as! TagCell 
     if self.tagsKnown.count != 0 { 
      fetchKnownTags() 
      var indexPathRow = (indexPath.row) 
      let group = groupsKnown[indexPath.section].tags[indexPathRow] 
      //return other cells 
      self.deleteButton.hidden = false 
      cell.TagNumberTxt.font = StoryBoard.myFont 
      cell.TagNumberTxt.textColor = StoryBoard.cellColour 
      cell.TagNumberTxt.text = "\(group.tagNumber)" 
     } 
     return cell 
    } 

Я надеюсь, что это поможет любому, кто пытается выполнить 2d массивы в tableViewCells!

Смежные вопросы