KAinone
@KAinone

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

フローティングボタン

Q&A

Closed

解決したいこと

フローティングボタンをフローティングアクションボタンの作り方を参考に作ってみたのですが、let ediButton = UIButton()の行に以下のエラーが表示されました。
理由が書いてないので調べても原因がわかりませんでした。ご存知の方がいらっしゃいましたら教えていただけると助かります。

発生している問題・エラー

Thread 1: EXC_BAD_ACCESS (code=2, address=0x16f103f50)

該当するソースコード

class ViewController: UITableViewController {
    
    
    let editButton = UIButton() //エラー箇所
    
    var startingFrame : CGRect!
    var endingFrame : CGRect!
    

//initialization
    override func viewDidLoad() {
        
        super.viewDidLoad()
        
        tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        tableView.separatorStyle = UITableViewCell.SeparatorStyle.none
        tableView.delaysContentTouches = false
        tableView.backgroundColor = .clear
        
        tableView.delegate = self
        tableView.dataSource = self
        
        setupSubviews()
        configureSizes()
        
        tableView.register(Cell.self, forCellReuseIdentifier: "cell")
        
        editButton.addTarget(self, action: #selector(handleEditButton(_:)), for: .touchUpInside)
    }


    //略


    func setupSubviews() {
        
        editButton.setTitle("編集", for: .normal)
        editButton.titleLabel?.font = UIFont.systemFont(ofSize: 17)
        editButton.titleLabel?.adjustsFontSizeToFitWidth = true
        editButton.backgroundColor = UIColor(hex: "FF77FF")
        editButton.layer.cornerRadius = editButton.frame.size.height / 2
        editButton.layer.masksToBounds = true
        
        tableView.addSubview(editButton)
        
        editButton.snp.makeConstraints {
            
            $0.width.equalTo(tableView.frame.width * 0.6)
            $0.height.equalTo(30)
            $0.bottom.equalToSuperview().offset(-50)
            $0.centerX.equalToSuperview()
        }
        
    }


    override func scrollViewDidScroll(_ scrollView: UIScrollView) {
        
        if (scrollView.contentOffset.y >= (scrollView.contentSize.height - scrollView.frame.size.height)) && self.editButton.isHidden {
            
            self.editButton.isHidden = false
            self.editButton.frame = startingFrame
            
            UIView.animate(withDuration: 1.0) {
                
                self.editButton.frame = self.endingFrame
            }
            
        }
        
    }
    
    
    func configureSizes() {
        
        let screenWidth = UIScreen.main.bounds.width
        let screenHeight = UIScreen.main.bounds.height
        
        startingFrame = CGRect(x: 0, y: screenHeight + 100, width: screenWidth, height: 100)
        endingFrame = CGRect(x: 0, y: screenHeight - 100, width: screenWidth, height: 100)
    }
0

1Answer

Xcodeの右下のデバッグエリアに、もっと詳しいエラーメッセージが出ていると思われます。
Xcode画面のスクショを貼ってもらえますか。


追記;
上のコードを適当に補完して実行してみましたが、ボタンの表示がおかしいですが、特にエラーで落ちることはありませんでした。

0Like

Comments

  1. @KAinone

    Questioner

    ご回答いただきありがとうございます。
    他のファイルのコードを変更していたところエラーが出なくなってしまいました。
    解決したわけではないのでまたエラーが出たらデバッグを貼るので相談させてください。
    わざわざ実行していただきありがとうございました。補完にお手数おかけしすみません。
    落ちることはないのですね。ボタンの表示のおかしな点について教えていただけると幸いです。

  2. ボタンの表示のおかしな点について教えていただけると幸いです。

    ボタンの幅と表示位置がおかしくて適当に補完しました。
    @KAinone さんの環境でボタンがちゃんと表示されているのなら、こちらの補完の問題と思われます。

    解決したわけではないのでまたエラーが出たらデバッグを貼るので相談させてください。

    分かる範囲でお答えいたします。

  3. @KAinone

    Questioner

    こちらで質問したエラーが別の問題と同時に起きたので、別の質問(特定のVCに遷移できない)で掲載しました。
    ここのQ&Aで添付したコードは、リンク先のMyAccountViewControllerに該当します。
    もし可能でしたらお力添えいただけると幸いです。よろしくお願いいたします。

Your answer might help someone💌