我想将图像放在ActionSheet的右侧,如AppStore所示。我知道如何添加图像并更改 date consumption
2019-06-01 3968
2019-06-02 9491
2019-06-03 20444
样式,但是我无法弄清楚如何更改这两个位置。
第三方库不受欢迎。
谢谢!
答案 0 :(得分:1)
已更新至Swift 4.2,并添加了图像。通过下面的链接获取更多信息。
import Foundation
import UIKit
class CustomActionSheet: UIAlertController{
private var controller : UITableViewController
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
controller = UITableViewController(style: .plain)
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
controller.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
controller.tableView.dataSource = self
controller.tableView.addObserver(self, forKeyPath: "contentSize", options: [.initial, .new], context: nil)
self.setValue(controller, forKey: "contentViewController")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
controller.tableView.removeObserver(self, forKeyPath: "contentSize")
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard keyPath == "contentSize" else {
return
}
controller.preferredContentSize = controller.tableView.contentSize
}
}
extension CustomActionSheet: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
switch(indexPath.row) {
case 0:
cell.textLabel?.text = "Share Link via iCloud"
cell.accessoryView = UIImageView(image:UIImage(named:"image1.png")!)
break
case 1:
cell.textLabel?.text = "Send a Copy"
cell.accessoryView = UIImageView(image:UIImage(named:"image2.png")!)
break
case 2:
cell.textLabel?.text = "Open in Another App"
cell.accessoryView = UIImageView(image:UIImage(named:"image3.png")!)
break
case 3:
cell.textLabel?.text = "Move to..."
cell.accessoryView = UIImageView(image:UIImage(named:"image4.png")!)
break
default:
fatalError()
}
return cell
}
}
您可以从视图控制器中使用此自定义类
let controller = CustomActionSheet(title: nil, message: nil, preferredStyle: .actionSheet)
controller.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
self.present(controller, animated: true, completion: nil)
答案 1 :(得分:0)
无法使用标准的UIAlertController
API。
滚动您自己的警报,或重新考虑您对第三方库的厌恶。
从文档中:
重要
UIAlertController类旨在按原样使用,并且不支持子类化。此类的视图层次结构是私有的,不能修改。
请注意,其他答案似乎有效,但违反了此限制。如果您确实遵循它们,请注意它们可能随时停止运行,甚至您的应用可能会被Apple拒绝。
答案 2 :(得分:0)
这有点棘手,但是可以实现;
首先不要使用UIActionSheet
,因为iOS8已弃用
将UIAlertController
与preferredStyle = .actionSheet
然后手动放置图像:
let imageView = UIImageView(image: UIImage(named: "yourImage"))
imageView.frame = CGRect(x: alertController.view.frame.width-25-24, y: 18, width: 24, height: 24)
alertController.view.addSubview(imageView)
玩alertController.view.frame.width-25-24
放置图片
注意:这会将图像放置在您的首要警报操作中。如果要对图像进行多种操作,则需要使用 y 坐标(例如)
let imageViewAction2 = UIImageView(image: UIImage(named: "yourSecondImage"))
alertController.view.addSubview(imageViewAction2)
imageViewAction2.frame = CGRect(x: alertController.view.frame.width-25-24, y: 75, width: 24, height: 24)