Day: June 12, 2018

Swift4:UITextView制御(再修正)

placeholderの制御に関して、解決方法がわかりました。

解決方法

  1.  Z.yUserNote.endEditing(true)を付加
    ①このアプリの場合、表の行がクリックされたとき、UITextViewに対して.endEditing(true)を実行します。
    ②textViewDidBeginEditingやtextViewDidEndEditiongでフラグを立て、これを監視する必要はありません。.endEditing(true)を実行すると、UITextViewからキャレットが移動されます。
  2. 設定された値の変更(save)
    当該イベントが終了したときではなく、ほかのイベントがキックされたとき、実施しています(従来通り)。これは、textViewDidEndEditiongで実施しても、結局、ほかのイベントがはじまったときに監視しなければならないからです。
  3. キーボードを閉じる処理
    iPadでは問題がないのですが、iPhone SEだと入力対象エリアがキーボードで隠れてしまい、確認ができないからです。
    ①クリックされた直後にUITextFieldキーボードを閉じる。
    ②textViewDidEndEditingでUITextViewキーボードを閉じる。

@IBAction func ExecIBAGo2Click(){                        //<*Process when a row in UITableView is kicked*>
   self.ExecClickedRow(self.Z.qRow, pCount:0)            // 🔵🔵Click Process🔵🔵
}//🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳🐳
func ExecClickedRow(_ pRow:Int, pCount:Int) {//<*pCount>=0: Click Process pCount<0: Update process after a row removal*>
   Z.ySearchbar.resignFirstResponder()                    //Close a keyboard for UITextField(Search).
   if pRow < 0 || pRow >= Z.rcArray.count || Z.rcArray.count <= 0 {//Available?
       Z.qRow          = -999                           //Out of the Array.
       return                                           //♻️return♻️ Go back.
   } else { }                                           //
   if pCount >= 0 {                                     //1st click or 2nd click and later?
       ExecSetValues2Array(Z.qRow//Save the previous values in tow UITextField and one UITextView.
   } else { }                                           //
   Z.yUserNote.endEditing(true)                         //End editing UITextView.
   Z.qRow              = pRow                           //Set the target row.
   Z.maybeLastRow      = pRow                           //Set the target row just in case.
   ExecSetDateTitleMemo(Z.qRow)                         //Draw Date & Time 📅Group 📚Title.
   Z.sortURL           = Z.rcArray[Z.qRow][Z.fURL] as! String//Set the current URL in case of clicking the screen shot.
   Z.yTableView.selectRow(at: IndexPath(row: Z.qRow, section: 0), animated: true, scrollPosition: .top)//Select the row.
   Z.yTableView.reloadData()                           //🍋🍋reloadData🍋🍋    }//====================================================//
func ExecSetDateTitleMemo(_ pRow:Int) {                //<*Set values to UITextView*>
   Z.yUserNote.text    = “”                            //
   if pRow < 0 || pRow >= Z.rcArray.count { return }   //♻️return♻️ The previous row is out of the array
   else { }                                            //
   Z.yGroup.text       = (Z.rcArray[pRow][Z.fGroup] as! String)//Set Group value.
   Z.yTitle.text       = (Z.rcArray[pRow][Z.fTitle] as! String)//Set Title value.
   let wImage:UIImage  = Com.CallResizeCapturedImage((Z.rcArray[pRow][Z.fScreen] as! UIImage), pImageView:Z.yScreen)//Set Screenshot.
   Z.yScreen.image     = wImage                        //
   let wCheck:NSMutableAttributedString?   = (Z.rcArray[pRow][Z.fNote] as? NSMutableAttributedString) //Check UserNote.
   if wCheck == nil || (wCheck?.string.count)! <= 0  { //Set the placeholder if the caret is out of the UITextView & no data.
       if wkEdited == “” { Z.yUserNote.attributedText = wkPlaceholder }//
       else              {  }                              //
   } else { Z.yUserNote.attributedText = Z.rcArray[pRow][Z.fNote] as! NSMutableAttributedString }//Set UserNote.
}//========================================================//
func textViewDidBeginEditing(_ textView: UITextView) {     //<*Watch the UITextView(Note Area)*>
   if Z.yUserNote.text == wkPlaceholder.string {           //Placeholder string?
      Z.yUserNote.text            = “”                     //No data.
      Z.yUserNote.textColor       = UIColor.black</b>      //Black. (Placeholder: Gray)
   } else {  }                                             //
}//========================================================//
func textViewDidEndEditing(_ textView: UITextView) {       //<*Watch the carsor (caret)*>
  Z.yUserNote.resignFirstResponder()                      //Close keyboard for UITextView(UserNote).
}//========================================================//

Screenshot 2018-06-12 07.34.11