长按时,如何从目标 c 函数而不是 contextMenuInteraction 函数调用 ImagePreviewController: UIViewController ?

问题描述

下面的这个函数需要转入一个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 函数中。

第一次回答后更新

我似乎得到了答案和一些修改

  1. weak var viewController: UIViewController?
    
  2. viewController?.present(previewVC,animated: true,completion: nil)
    
  3. 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>

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...