问题描述
下面的这个函数需要转入一个ObjC函数
///this 1st func is in UITableViewController,the others are in UITableViewCell
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "cell",for: indexPath) as? ViewControllerTableViewCell {
...}
class ViewControllerTableViewCell: UITableViewCell,UIContextMenuInteractionDelegate
func contextMenuInteraction(_ interaction: UIContextMenuInteraction,configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
UIContextMenuConfiguration(identifier: nil,previewProvider: {
if self.cc == interaction {
let image3 = UIImage(named:"ringy.png")
if let unwrappedImage1 = image3 {
return ImagePreviewController(image:unwrappedImage1)
}
else {
return nil
}
}
else if self.vv == interaction{
let image3 = UIImage(named:"green.png")
if let unwrappedImage1 = image3 {
return ImagePreviewController(image:unwrappedImage1)
}
else {
return nil
}
}
else {
return nil
}
})
}
现在Obj C函数
@objc func didLongPress() {
///database call
if ab as! Int>0 {
/// here the part for ringy.png needs to go
} else {
/////here the part for green.png needs to go
}
}
else {
print("No data available")
}
})
}
ObjC 在覆盖函数中获取句柄
let longPress = UILongPressGestureRecognizer(target: self,action: #selector(didLongPress))
like?.addGestureRecognizer(longPress)
我目前遇到什么错误:
void 函数中的非 void。也就是说,如果我把代码的 ringy/image3 和 green/image3 部分放在 objC 函数中。
第一次回答后更新
我似乎得到了答案和一些修改
-
weak var viewController: UIViewController?
-
viewController?.present(previewVC,animated: true,completion: nil)
-
cell.viewController = self ///inside cellForRowAt
我剩下的唯一问题是 ImagePreviewController 的尺寸错误/几乎全屏。它们应该是:
class ImagePreviewController: UIViewController {
private let imageView = UIImageView()
init(image: UIImage) {
super.init(nibName: nil,bundle: nil)
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
imageView.image = image
view = imageView
let size = UIScreen.main.bounds.size
preferredContentSize = .init(width: size.width,height: size.height/1.55)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
解决方法
如果你想展示一个新的视图控制器,你可以执行一个转场(如果你使用故事板)或者用经典的方式来做:
SQL> DECLARE
2 car_id NUMBER;
3 car_str VARCHAR2 (10);
4 BEGIN
5 FOR i IN 1 .. 5
6 LOOP
7 SELECT MAX (id) + i
8 INTO car_id
9 FROM vehicles
10 WHERE id < 10;
11
12 car_str := 'car' || LPAD (i,4,'0');
13
14 dbms_output.put_line('car_id = ' || car_id ||',car_str = ' || car_str);
15
16 Package_Store.cars (car_id,'garage',car_str,1,4);
17 END LOOP;
18 END;
19 /
car_id = 4,car_str = car0001
car_id = 5,car_str = car0002
car_id = 6,car_str = car0003
car_id = 7,car_str = car0004
car_id = 8,car_str = car0005
PL/SQL procedure successfully completed.
SQL>