質問編集履歴

1 コードの変更

退会済みユーザー

退会済みユーザー

2018/04/03 14:39  投稿

tableViewを利用したlabelの表示について
swift4.1
```swift
import UIKit
class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate{
 
 @IBOutlet weak var mytableView: UITableView!
 var add = UILabel()
 let item = ["kei"]
 var item = [String]()
 
 //+ボタン
 @IBAction func addlabel(_ sender: Any) {
   
   alert()
 }
 
 //ラベルについて
 func label(){
   add = UILabel (frame: CGRect())
   add = UILabel(frame: CGRect(x: 130, y:250, width: 100, height:20))
   //ラベルの大きさ、座標指定
   //add.text = "labelです"
   //文字を変更
   
   add.backgroundColor = UIColor.lightGray
   
   add.font = UIFont.systemFont(ofSize: 30)
   //文字の大きさ
   
   add.textColor = UIColor.black
   //文字カラー
   
   add.sizeToFit()
   //文字数にあわせてlabelの大きさを変更(サイズが文字にフィットする)
 
   self.view.addSubview(add)
   //実際にviewに見える形でlabelが出現する
 }
 
 func alert(){
   // テキストフィールド付きアラート表示
   
   let alert = UIAlertController(title: "タイトル", message: "メッセージ", preferredStyle: .alert)
   
   // OKボタンの設定
   let okAction = UIAlertAction(title: "OK", style: .default, handler: {
     (action:UIAlertAction!) -> Void in
     
     // OKを押した時入力されていたテキストを表示
     if let textFields = alert.textFields {
       
       // アラートに含まれるすべてのテキストフィールドを調べる
       for textField in textFields {
         self.label()
         self.item.insert(textField.text!, at: 0)  
         self.mytableView.insertRows(at: [IndexPath(row: 0, section: 0)],with: UITableViewRowAnimation.automatic)  
         self.add.text = textField.text!
         self.add.sizeToFit()
         print(textField.text!)
         self.Gesture()
         self.doubleclic()
       }
     }
   })
   alert.addAction(okAction)
   
   // キャンセルボタンの設定
   let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
   alert.addAction(cancelAction)
   
   // テキストフィールドを追加
   alert.addTextField(configurationHandler: {(textField: UITextField!) -> Void in
     textField.placeholder = "テキスト"
   })
   
   alert.view.setNeedsLayout() // シミュレータの種類によっては、これがないと警告が発生
   
   // アラートを画面に表示
   self.present(alert, animated: true, completion: nil)
   
 }
 
 func deletealert() {
   let alert = UIAlertController(title:"you realy want to delete?", message: "メッセージ", preferredStyle: .alert)
   
   let okAction = UIAlertAction(title: "YES", style: .default, handler: {
     (action:UIAlertAction!) -> Void in
   
     //labelの削除について
     self.add.tag = 1
     
     self.view.subviews.forEach {
       if $0.tag == 1{
         $0.removeFromSuperview()
         
       }
     }
   })
    alert.addAction(okAction)
   
   // キャンセルボタンの設定
   let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
   alert.addAction(cancelAction)
   
   alert.view.setNeedsLayout() // シミュレータの種類によっては、これがないと警告が発生
   // アラートを画面に表示
   self.present(alert, animated: true, completion: nil)
   
 }
 
 
 @objc func longpress(sender: UILongPressGestureRecognizer){
   
   // 長押し開始〜
   if(sender.state == UIGestureRecognizerState.began)
   {
     
   } else if (sender.state == UIGestureRecognizerState.ended)
   {
     //labelの削除について
     self.add.tag = 1
     
     self.view.subviews.forEach {
       if $0.tag == 1{
         $0.removeFromSuperview()
         
       }
     }
     alert()
     print("ロングタップされたよ。")
   }
   
 }
 
 func Gesture() {
   
   // UILongPressGestureRecognizerインスタンス作成
  let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longpress(sender:)))
   // 時間(デフォルト0.5秒)
   longPressGesture.minimumPressDuration = 0.5
   self.add.isUserInteractionEnabled = true
   self.add.addGestureRecognizer(longPressGesture)
   
 
   
 }
 
 func doubleclic(){
   // ダブルタップ
   let doubeltapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.doubletap(sender:)))
   doubeltapGesture.numberOfTapsRequired = 2
   self.add.isUserInteractionEnabled = true
   self.add.addGestureRecognizer(doubeltapGesture)
 }
 
 @objc func doubletap(sender: UITapGestureRecognizer){
   if(sender.state == UIGestureRecognizerState.began)
   {
   }else if(sender.state == UIGestureRecognizerState.ended)
   {
     deletealert()
     print("tapされたよ")
   }
   
 }
 
 
   
 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
   return item.count
 }
 
 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
   cell.textLabel?.text = add.text
   //cell.textLabel?.text = add.text
   let todoLabel = item[indexPath.row]
   cell.textLabel?.text = todoLabel
   return cell
 }
 
 
 override func viewDidLoad() {
   super.viewDidLoad()
 
  mytableView.dataSource = self
  mytableView.delegate = self
 }
 
 
 override func didReceiveMemoryWarning() {
   super.didReceiveMemoryWarning()
   // Dispose of any resources that can be recreated.
 }
}
 
```
**やりたいこと**
tabelviewのcell内にlabelを挿入したい
**困っていること**
labelをコードから作っているためcell内に挿入する方法が分からない
エラーは起きないがcellの中に挿入できずにいる。コンソールには入力した文字は表示されるので下記のコードが良くないのかなと推測できるがどうすればいいの分からずいに困っています。
//ラベルについて
```ここに言語を入力
func label(){
   add = UILabel (frame: CGRect())
  ...
  ...
}
```
  • iOS

    5158 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    5565 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    9881 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る