UIAlertAction按钮文本左对齐

时间:2017-11-18 20:42:38

标签: ios swift uialertcontroller uialertaction

我想将UIAlertAction文本对齐方式与左对齐并添加图标,如图所示。我花了很多时间在谷歌上获得解决方案,但没有找到正确的答案。警报标题的每个正文帖子都不是警报动作标题。 enter image description here

请建议我使用 swift 的正确方法。

谢谢!

5 个答案:

答案 0 :(得分:5)

您可以使用下面的示例代码来做到这一点。简单而简单。

快捷键4

let actionSheetAlertController: UIAlertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)

let cancelActionButton = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
actionSheetAlertController.addAction(cancelActionButton)


let documentsActionButton = UIAlertAction(title: "Documents", style: .default, handler: nil)
actionSheetAlertController.addAction(documentsActionButton)
documentsActionButton.setValue(#imageLiteral(resourceName: "doccument"), forKey: "image")
documentsActionButton.setValue(kCAAlignmentLeft, forKey: "titleTextAlignment")

let cameraActionButton = UIAlertAction(title: "Camera", style: .default, handler: nil)
actionSheetAlertController.addAction(cameraActionButton)
cameraActionButton.setValue(#imageLiteral(resourceName: "camera"), forKey: "image")
cameraActionButton.setValue(kCAAlignmentLeft, forKey: "titleTextAlignment")

let galleryActionButton = UIAlertAction(title: "Gallery", style: .default, handler: nil)
actionSheetAlertController.addAction(galleryActionButton)
galleryActionButton.setValue(#imageLiteral(resourceName: "gallery"), forKey: "image")
galleryActionButton.setValue(kCAAlignmentLeft, forKey: "titleTextAlignment")

actionSheetAlertController.view.tintColor = kTHEME_COLOR
self.present(actionSheetAlertController, animated: true, completion: nil)

答案 1 :(得分:3)

您可以使用以下示例代码执行此操作。 用图像替换图像名称

Swift 3

 let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
 let camera = UIAlertAction(title: "Camera", style: .default) { (action) in
  // Do something
 }
 let cameraImage = UIImage(named: "icon_camera")
 camera.setValue(cameraImage, forKey: "image")
 camera.setValue(0, forKey: "titleTextAlignment")
 actionSheet.addAction(camera)

答案 2 :(得分:2)

快速kCAAlignmentLeft的5.0版本(由@Niraj Solanki here回答)是CATextLayerAlignmentMode.left 因此,代码应如下所示:

Swift 5.0

documentsActionButton.setValue(CATextLayerAlignmentMode.left, forKey: "titleTextAlignment")

答案 3 :(得分:0)

正如在评论中已经说过的那样,UIAlertController不提供其视图的自定义。但是,您可以构建自己的操作表视图或使用某些第三方,例如https://github.com/xmartlabs/XLActionController

答案 4 :(得分:0)

这种情况下最快,最简单的实现方式:

extension UIAlertAction {
    func addImage(_ image: UIImage){
        setValue(image, forKey: "image")
        setValue(0, forKey: "titleTextAlignment")
    }
}

使用:

let editAction = UIAlertAction(title: "Edit", style: .default, handler: nil)
editAction.addImage(UIImage(systemName: "square.and.pencil")!)
alertSheet.addAction(editAction)

注意: CATextLayerAlignmentMode-不是您所需要的。因为正确的对齐方式对它不起作用!最好使用数字文字:

  • 0-左
  • 1-中心
  • 2-对

为了通用,我将创建这个枚举:

enum AlertActionAlignment:Int {
    case left, center, right
}

...
setValue(align.rawValue, forKey: "titleTextAlignment")