2016-10-13 7 views
0

私はswift 2.3xcode 7.3.1にニュースアプリをします。私はRealm DBとその中のデータをサーバーから持っています。ボタンを押して選択したデータ(ニュース)を表示すると、ViewControllerに移動する必要があります。私のニュースの要素によってボタンが押された。ニュースの選択された要素からデータを渡して別の情報を表示する方法ViewControllerレルムからViewControllerにデータを渡す方法

これはニュースの要素です。横スクロールでの要素によってボタンの上: enter image description here

は、これはコードです:

import UIKit 
import RealmSwift 

let realm4 = try! Realm() 

class MainViewController: UIViewController, HorizontalScrollDelegate { 

let newsObj = realm4.objects(News) 
let nObj = News() 

var imageURL: NSURL? 

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let hScroll = HorizontalScroll(frame: CGRectMake(0, 0, 380, 160)) 
    hScroll.delegate = self 
    hScroll.backgroundColor = UIColor.whiteColor() 
    self.view.addSubview(hScroll) 
    view.reloadInputViews() 

} 
    func numberOfScrollViewElements() -> Int { 
     return newsObj.count 
    } 

    func elementAtScrollViewIndex(index: Int) -> UIView { 

     let indexes = newsObj[index] 

     let view = UIView(frame: CGRectMake(5.0, 0.0, 200.0, 200.0)) 
     var imageView = UIImageView() 
     let imageLabel = UIImageView() 
     let newsLable = UILabel() 
     let button = UIButton() 

     var image: UIImage? { 

      get { return imageView.image } 
      set { 
       imageView.image = newValue 
       imageView.sizeToFit() 
      } 
     } 

     newsLable.text = indexes.newsTitle 

     imageURL = NSURL(string: indexes.newsImage) 

     if let url = imageURL { 
      let imageData = NSData(contentsOfURL: url) 
      if imageData != nil { 
       image = UIImage(data: imageData!) 
      } 
     } 

     newsLable.lineBreakMode = .ByWordWrapping 
     newsLable.font = UIFont(name: "Roboto-Bold", size: 18) 
     newsLable.textColor = UIColor.whiteColor() 
     newsLable.frame = CGRectMake(7.0, 90.0, 200.0, 50.0) 
     newsLable.textAlignment = .Left 
     newsLable.numberOfLines = 0 

     button.frame = CGRectMake(0.0, 0.0, 200.0, 200.0) 
     button.addTarget(indexes, action: #selector(tapAction2), forControlEvents: .TouchUpInside) 
     print("This is 1 nObj \(self.nObj)") 

     imageLabel.backgroundColor = UIColor.blackColor() 
     imageLabel.alpha = 0.45 
     imageLabel.frame = CGRectMake(5.0, 90.0, 200.0, 65.0) 
     imageView.frame = view.frame 

     view.addSubview(imageView) 
     view.addSubview(imageLabel) 
     view.addSubview(newsLable) 
     view.addSubview(button) 

     return view 
    } 

func tapAction2(index: Int) { 
    print("This is func INDEX \(index)") 
    //let segueIndex = index 
    let storyBoard = UIStoryboard(name: "Main", bundle: nil) 
    let newView = storyBoard.instantiateViewControllerWithIdentifier("NewsDetailViewController") as! NewsDetailViewController 
    newView.modalPresentationStyle = UIModalPresentationStyle.Custom 
    print("This is nObj \(self.nObj)") 
    print("This is INDEX \(index)") 
    newView.newsOfTitle = String(index) 
    presentViewController(newView, animated: true, completion: nil) 
} 
} 

私はインデックスを使用してデータを渡すためにしてみてください。しかし、コンソールで私は空のデータを持っています。おそらくRealmの問題です。コンソールで が、私はこれはINDEX 140659923446288

あるしかし、私は私のプロジェクトでは、このデータを持っていない

を参照してください

これは、私の中で述べたようにRealm DB

enter image description here

答えて

0

UIButton Class Reference、アクションメトの署名Dは3つの形式

@IBAction func doSomething() 
@IBAction func doSomething(sender: UIButton) 
@IBAction func doSomething(sender: UIButton, forEvent event: UIEvent) 

ではなくfunc doSomething(index: Int)をとります。

あなたのメソッドで間違ったインデックスを取得する理由です。

+0

私は何をする必要がありますか? – Zhanserik

+1

'tapAction2()'メソッドを変更して、 'Int'引数の代わりに' UIButton'引数を取る必要があります。ボタンはデフォルトでインデックスを報告しません。どのようなインデックスが 'UIButton'インスタンスに対応するのか把握するロジックを記述する必要があります。 – AustinZ

関連する問題