2015-07-27 3 views
1

В настоящее время работает над Swift-приложением, и я построил навигационное меню слайдов с использованием API на https://github.com/mutualmobile/MMDrawerController. Я пытаюсь изменить фоновое изображение каждой ячейки из пустого и скучного белого цвета в изображение, которое я выбираю самостоятельно.Как настроить фоновые изображения ячеек

Я проверил много ресурсов из переполнения стека self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background"]], который я вставил в начале оператора case, по-видимому, создает ошибку: Ожидаемое выражение из строкового литерала. Где бы я вставлял заявление для фонового изображения и что бы это было?

class LeftSideViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    var menuItems:[String] = ["Daily Quote","Passion", "Failure","Dream","Grind","Hang on","Haters","Wisdom","Karma"]; 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     return menuItems.count 
    } 

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

     var mycell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) as! MyCustomTableViewCell 

     mycell.menuItemLabel.text = menuItems[indexPath.row] 
     return mycell; 
    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    { 
     switch(indexPath.row){ 

     case 0: 

      var centerViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController") as! ViewController 

      var centerNavController = UINavigationController(rootViewController: centerViewController) 

      var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

      appDelegate.centerContainer!.centerViewController = centerNavController 

      appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) 

break; 
     case 1: 
      self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background"]] 

      var aboutViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PassionViewController") as! PassionViewController 

      var aboutNavController = UINavigationController(rootViewController: aboutViewController) 

      var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
      appDelegate.centerContainer!.centerViewController = aboutNavController 
      appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) 

break; 

     case 2: 

      var aboutViewController = self.storyboard?.instantiateViewControllerWithIdentifier("FailureViewController") as! FailureViewController 

      var aboutNavController = UINavigationController(rootViewController: aboutViewController) 

      var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
      appDelegate.centerContainer!.centerViewController = aboutNavController 
      appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) 
break; 
     case 3: 

      var aboutViewController = 
      self.storyboard?.instantiateViewControllerWithIdentifier("DreamViewController") 
      as! DreamViewController 

      var aboutNavController = UINavigationController(rootViewController: aboutViewController) 

      var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
      appDelegate.centerContainer!.centerViewController = aboutNavController 
      appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) 
      break; 

     case 4: 

      var aboutViewController = 
      self.storyboard?.instantiateViewControllerWithIdentifier("GrindViewController") 
       as! GrindViewController 

      var aboutNavController = UINavigationController(rootViewController: aboutViewController) 

      var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
      appDelegate.centerContainer!.centerViewController = aboutNavController 
      appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) 
break; 
     case 5: 

      var aboutViewController = 
      self.storyboard?.instantiateViewControllerWithIdentifier("HangViewController") 
       as! HangViewController 

      var aboutNavController = UINavigationController(rootViewController: aboutViewController) 

      var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
      appDelegate.centerContainer!.centerViewController = aboutNavController 
      appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) 
break; 

     case 6: 

      var aboutViewController = 
      self.storyboard?.instantiateViewControllerWithIdentifier("HaterViewController") 
       as! HaterViewController 

      var aboutNavController = UINavigationController(rootViewController: aboutViewController) 

      var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
      appDelegate.centerContainer!.centerViewController = aboutNavController 
      appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) 
break; 
     case 7: 

      var aboutViewController = 
      self.storyboard?.instantiateViewControllerWithIdentifier("WisdomViewController") 
       as! WisdomViewController 

      var aboutNavController = UINavigationController(rootViewController: aboutViewController) 

      var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
      appDelegate.centerContainer!.centerViewController = aboutNavController 
      appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) 
break; 
     case 8: 

      var aboutViewController = 
      self.storyboard?.instantiateViewControllerWithIdentifier("KarmaViewController") 
       as! KarmaViewController 

      var aboutNavController = UINavigationController(rootViewController: aboutViewController) 

      var appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
      appDelegate.centerContainer!.centerViewController = aboutNavController 
      appDelegate.centerContainer!.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil) 

     default: 

      println("\(menuItems[indexPath.row]) is selected"); 
     } 
    } 
+0

Вы хотите, чтобы убедиться, что вы установите ячейку 'backgroundColor' для очистки, а также клетка' contentView.backgroundColor' очистить. В противном случае вы не увидите изображение. Чтобы установить изображение, создайте UIView с цветом фона из набора изображений и присвойте его cell.backgroundView. Вы можете установить ячейки backgroundColor, но он будет отображаться только до тех пор, пока фон 'contentView' станет ясным. –

ответ

1

Вы можете сделать это программно также путем создания пользовательского класса для Tableview клетки. например, внутри вашего cellForRowAtIndexPath называют пользовательского класс

var imageArray = ["pic1.png", "pic2.png", "pic3.png"] 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    var mycell = MyCustomClass(frame: CGRectMake(0, 0, self.view.frame.width, 50), row: indexPath.row, imageArray: imageArray) 
    mycell.menuItemLabel.text = menuItems[indexPath.row] 
    return mycell; 
} 

class MyCustomClass: UITableViewCell { 
    var menuItemLabel: UILabel! 
    init(frame: CGRect, row: Int, imageArray: Array<String>) { 
     super.init(style: UITableViewCellStyle.Default, reuseIdentifier: "cell") 

     //declare a image array that has the name of the image to be included 
     var image = imageArray[row] 

     backgroundColor = UIColor(patternImage: UIImage(named: "\(image)")!) 
     menuItemLabel = UILabel(frame: CGRectMake(0, 0, frame.width, 50)) 
     addSubview(menuItemLabel) 
    } 
} 

Надеется, что это поможет

+0

Фоновое изображение, похоже, перекрывает текст ... Не может видеть текст ... а также он не настраивает один, но все одновременно ... –

+0

так что вы хотите достичь? имеют различное изображение для каждой ячейки? – George

+0

изменил код, чтобы избежать совпадения – George

0

Пожалуйста, попробуйте этот следующий код:

self.view.backgroundColor = UIColor(patternImage: UIImage(named: "imageName")!) 
+0

Где я вставляю этот оператор, всякий раз, когда я нажимаю на эту ячейку, меняют фоновые изменения сверху (который является добавлением ячеек категаров), он делает что-то, но не правильное. –

+0

просто очистить каждую пользовательскую ячейку Backgroundcolor –

0

Сначала вы должны установить вид фон, то вы должны установить для каждой ячейки прозрачного цвета фона цвета:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.view.background = UIColor(patternImage: UIImage(named: "backgroundImage")!) 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var mycell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) as! MyCustomTableViewCell 
    mycell.backgroundColor = UIColor.clearColor() 
    mycell.menuItemLabel.text = menuItems[indexPath.row] 
    return mycell; 
} 

обновления

С пользовательской ячейкой, созданной на xib (например, «MyCustomTableViewCell.xib»), вам нужно:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let nib: UINib = UINib(nibName: "MyCustomTableViewCell", bundle: NSBundle.mainBundle()) 
    tableView.registerNib(nib, forCellReuseIdentifier: "MyCustomTableViewCellIdentifier") 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var mycell = tableView.dequeueReusableCellWithIdentifier("MyCustomTableViewCellIdentifier", forIndexPath: indexPath) as! MyCustomTableViewCell 
    ... 
} 

И вы должны установить MyCustomTableViewCellIdentifier имя на XIb:

enter image description here

+0

Ошибка: t вызывать чистый цвет без аргументов, а UIView не имеет имени с именем background error –

+0

Извините, я поставил два бесполезных брата: UIColor.clearColor() –

+0

UIView не имеет имени с именем background error –

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