私はswift 2.3
、xcode 7.3.1
にニュースアプリをします。私はRealm DB
とその中のデータをサーバーから持っています。ボタンを押して選択したデータ(ニュース)を表示すると、ViewController
に移動する必要があります。私のニュースの要素によってボタンが押された。ニュースの選択された要素からデータを渡して別の情報を表示する方法ViewController
?レルムからViewControllerにデータを渡す方法
これはニュースの要素です。横スクロールでの要素によってボタンの上:
は、これはコードです:
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
私は何をする必要がありますか? – Zhanserik
'tapAction2()'メソッドを変更して、 'Int'引数の代わりに' UIButton'引数を取る必要があります。ボタンはデフォルトでインデックスを報告しません。どのようなインデックスが 'UIButton'インスタンスに対応するのか把握するロジックを記述する必要があります。 – AustinZ