###前提・実現したいこと
ここに質問したいことを詳細に書いてください
RealmSwiftを使って、野球関係のデータベースを作っています。
ViewController(前項)でチーム名と選手名を登録して、ViewController3(後項)で参照・修正(更新)するコードを書きたいと思っています。
ネット等でアドバイスを貰いながら、下記コードまではできたのですが、ViewController3(後項)でUITextFieldをタップしてもRealmSwiftの中身を表示することができないでいます。
###該当のソースコード
以下VeiwController(前項)
import UIKit
import RealmSwiftclass ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textField: UITextField! @IBOutlet weak var textField2: UITextField! @IBOutlet weak var teamLabel: UILabel! @IBOutlet weak var nameLabel: UILabel! var team:String! var name:String! override func viewDidLoad() { super.viewDidLoad() } @IBAction func textFieldDidEndOnExit(sender: UITextField) { textField.delegate = self textField2.delegate = self let realm = try! Realm() let user = User() team = textField.text teamLabel.text = team name = textField2.text nameLabel.text = name user.team = team user.name = name try! realm.write { realm.add(user) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } //キーボードを閉じる func textFieldShouldReturn(textField: UITextField) -> Bool { textField.resignFirstResponder() return true }
}
以下ViewController3(後項)
import UIKit
import RealmSwiftclass ViewController3: UIViewController,UIPickerViewDelegate,UIToolbarDelegate, UITextFieldDelegate{
@IBOutlet weak var textField: UITextField! @IBOutlet weak var textField2: UITextField! @IBOutlet weak var teamLabel: UILabel! @IBOutlet weak var nameLabel: UILabel! var user: Results<User>? var token: NotificationToken? var team:String! var name:String! override func viewDidLoad() { super.viewDidLoad() let realm = try! Realm() let user = realm.objects(User)[0] var team1:String! var name1:String! team1 = user.team teamLabel.text = team1 name1 = user.name nameLabel.text = name1 let pickerView = UIPickerView() pickerView.showsSelectionIndicator = true pickerView.delegate = self textField.inputView = pickerView var toolBar: UIToolbar! toolBar = UIToolbar(frame: CGRectMake(0, self.view.frame.size.height/6, self.view.frame.size.width, 40.0)) toolBar.layer.position = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height-20.0) toolBar.barStyle = .BlackTranslucent toolBar.tintColor = UIColor.whiteColor() toolBar.backgroundColor = UIColor.blackColor() let toolBarBtn = UIBarButtonItem(title: " 完了 ", style: .Done, target: self, action: #selector(ViewController3.tappedToolBarBtn(_:))) toolBarBtn.tag = 1 toolBar.items = [toolBarBtn] textField.inputAccessoryView = toolBar token = realm.addNotificationBlock { /*[weak self]*/ (notification, realm) -> Void in /*self?.*/pickerView.reloadAllComponents() } } @IBAction func textFieldDidEndOnExit(sender: UITextField) { //変数定義 textField.delegate = self textField2.delegate = self let realm = try! Realm() let user = User() try! realm.write { team = textField.text user.team = team name = textField2.text user.name = name } } //pickerに表示する列数を返す func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int { return 1 } //pickerに表示する値を返すデリゲートメソッド func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> Int? { if let user = user { return user.count } return 0 } //pickerが選択された際に呼ばれるデリゲートメソッド func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if let user = user { return user[row].team } return nil } func tappedToolBarBtn(sender: UIBarButtonItem) { textField.resignFirstResponder() }
}
###試したこと
前項のUITextFieldにチーム名・選手名を入力。
後項のUITextFieldをタップすると、前項で入力した内容が、UIPickerViewで参照できる。
その中から1つを選んで書き換えるモードになって、改行をタップすると更新が完了する。
という内容にしたいと思っていますが、
まだそこまでできあがっていません。
というか、初心者のため、そこまでの知識がありません。
どなたか解る方ご教授お願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
RealmSwift 0.98.6
Xcode 7.3
あなたの回答
tips
プレビュー