iOS

Swift4:UITableViewRowAction

tableViewの行の削除orその行が保有するURLのwebページ読み込みをどうすればいいか考えてました。

簡単な方法がありました。

注意しないといけない点は、対象行にアラート表示した後でaction以下が再度起動されることです。つまり、次の通り。

◾️class MesaModalArea
//0ID 1 2 3Date 4URL 5folder 6file 7Title 8Favicon 9Undo 10Data
var rcArray:[NSMutableDictionary]= []
var rcUpdateSign:String     = “”      //Write MesaClip file or Not(“”).
var maybeLastRow:Int        = 0       //Current rcArray-row-number.
var qRow:Int                = 0       //target row number.

 

◾️class MesaTable
@IBOutletweakvar  yTableView:UITableView!    //tableView
var wkSelectedRow:Int = -1                   //work: Selected row number.
let Z = MesaModalArea.sharedInstance         //Common area.

 

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath)//
-> [UITableViewRowAction]? {                   //
wkSelectedRow         = indexPath.row        //Set selected row number.
let wRead = UITableViewRowAction(style:.normal, title:”Read”) {//🔴🔴Read URL
(action, indexPath) in                       //
self.Z.bookmarkURL = self.Z.rcArray[self.wkSelectedRow][self.Z.fURL] as! String//
self.yTableView.reloadData()                 //Reload the table.
self.ExecClose(sender: self)                 //Close and Exit.
}                                              //
wRead.backgroundColor   = UIColor.blue       //Change background color.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
let wDelete = UITableViewRowAction(style:.default, title:”Delete”) {//🔴🔴Remove
(action, indexPath) in                       //
self.Z.rcArray.remove(at: indexPath.row)   //Remove this row.
self.Z.rcUpdateSign     = “up”             //Write MesaClip file.
tableView.deleteRows(at:[indexPath], with:.fade)//
if self.wkSelectedRow – 1  >= 0  {         //
self.Z.qRow = self.wkSelectedRow – 1       //Current row = Previous row.
} else if self.Z.rcArray.count > 0 { self.Z.qRow = 0}  //Current row = Next row.
else                               { self.Z.qRow = -1 }//Current row = NA
self.Z.maybeLastRow    = self.Z.qRow       //Current row number.
//var _:IndexPath = IndexPath(row: Z.qRow, section: indexPath.count)//
if self.Z.qRow >= 0 {                      //
tableView.selectRow(at: IndexPath(row: self.Z.qRow, //Select row.
section: 1), animated: true, scrollPosition: .middle)//
}  else { }                                //
self.yTableView.reloadData()               //Reload the table.
}                                            //
wDelete.backgroundColor = UIColor.red        //
return [wRead, wDelete]                      //
}//

Screenshot 2018-03-07 08.27.06

Categories: iOS, Swift, 技術