Ios e?@Pangu在您的initializeGroupState方法中,改为写入nextState=.vcTwo,您可以立即返回ViewControllerTwo。和initializeGroupVC方法应重命名为initializeSubGroupVC或您

Ios e?@Pangu在您的initializeGroupState方法中,改为写入nextState=.vcTwo,您可以立即返回ViewControllerTwo。和initializeGroupVC方法应重命名为initializeSubGroupVC或您,ios,swift,uitableview,Ios,Swift,Uitableview,e?@Pangu在您的initializeGroupState方法中,改为写入nextState=.vcTwo,您可以立即返回ViewControllerTwo。和initializeGroupVC方法应重命名为initializeSubGroupVC或您想知道的任何内容,但逻辑是否可以在没有vcTwo状态的情况下处理?…即枚举VCTypeState{case subGroup1,main,subGroup2,subGroup3}? import UIKit enum SubGroupStat


e?@Pangu在您的
initializeGroupState
方法中,改为写入
nextState=.vcTwo
,您可以立即返回
ViewControllerTwo
。和
initializeGroupVC
方法应重命名为
initializeSubGroupVC
或您想知道的任何内容,但逻辑是否可以在没有
vcTwo
状态的情况下处理?…即<代码>枚举VCTypeState{case subGroup1,main,subGroup2,subGroup3}?
import UIKit

enum SubGroupState
{
    case SubGroup1, None, SubGroup2, SubGroup3
}

class Manager: NSObject
{
    public var subGroupState = SubGroupState.None
    public var oldSubGroupState = SubGroupState.None
    public var showSubGroups = Bool()

    override init()
    {
        super.init()
    }

    public func initializeGroupState(row: Int) -> UIViewController
    {
        if showSubGroups == false && oldSubGroupState == .None
        {
            switch row
            {
                case 2:
                    subGroupState = .SubGroup1
                    break

                case 6:
                    subGroupState = .SubGroup2
                    break

                case 7:
                    subGroupState = .SubGroup3
                    break

                default:
                    subGroupState = .None
                    break
            }
        }

        if (subGroupState != .None && oldSubGroupState == .None)
            || (subGroupState == .None && oldSubGroupState != .None)
        {
            showSubGroups = true
        }
        else
        {
            showSubGroups = false
        }

        return initializeGroupVC(row: row)
    }

    fileprivate func initializeGroupVC(row: Int) -> UIViewController
    {
        let storyboard = UIStoryboard(name: "Main",
                                      bundle: nil)

        if showSubGroups == true
            && subGroupState != .None
        {
            guard let viewControllerOne = storyboard.instantiateViewController(withIdentifier: "ViewControllerOne")
                as? ViewControllerOne else {
                return UIViewController()
            }
            viewControllerOne.manager.oldSubGroupState = muscleSubGroupState
            viewControllerOne.manager.showSubGroups = showSubGroups

            return viewControllerOne
        }
        else
        {
            guard let viewControllerTwo = storyboard.instantiateViewController(withIdentifier: "ViewControllerTwo")
                as? ViewControllerTwo else {
                return UIViewController()
            }

            return muscleGroupExercisesVC
        }
    }

}
extension ViewControllerOne: UITableViewDataSource
{
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {
        tableView.deselectRow(at: indexPath,
                              animated: true)

        let viewController = manager.initializeGroupState(row: indexPath.row)
        self.navigationController?.pushViewController(viewController,
                                                      animated: true)
    }
}

class ViewControllerOne: UIViewController
{
    public var manager = Manager()

    ....
}
class ViewControllerOne: UIViewController, UITableViewDelegate {
  var isSubVC = false

  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: false)

    if self.isSubVC {
      // Push to ViewControllerTwo
    } else {
      // MainVC
      if indexPath.row == 2 || indexPath.row == 6 || indexPath.row == 7 {
        let subVC = self.storyboard?.instantiateViewController(withIdentifier: "ViewControllerOne") as! ViewControllerOne
        subVC.isSubVC = true
        self.navigationController?.pushViewController(subVC, animated: true)
      } else {
        // Push to ViewControllerTwo
      }
    }
  }
}
enum ViewControllerType {
  case main, subGroup1, subGroup2, subGroup3
}

class Manager {
  public var currentState = ViewControllerType.main

  public func initializeGroupState(row: Int) -> UIViewController {
    if self.currentState == .main {
      // MainVC, should push to SubVC if match condition
      switch row {
      case 2:
        return self.makeSubViewController(state: .subGroup1)
      case 6:
        return self.makeSubViewController(state: .subGroup2)
      case 7:
        return self.makeSubViewController(state: .subGroup3)
      default:
        return self.makeViewControllerTwo()
      }
    } else {
      // Current is SubVC, dont care kind of row, should push to ViewControllerTwo
      return self.makeViewControllerTwo()
    }
  }

  private func makeViewControllerTwo() -> UIViewController {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "ViewControllerTwo")
    return vc
  }

  private func makeSubViewController(state: ViewControllerType) -> UIViewController {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "ViewControllerOne") as! ViewControllerOne
    vc.manager.currentState = state
    return vc
  }
}
@property (nonatomic, strong) NSArray *subdata;
@property (nonatomic, strong) NSString *title;
@property (nonatomic, assing) BOOL isSpecial; //of course wording should be adapted to the real logic and your needs
@property (nonatomic, strong), NSArray *tableViewDataSource;
- CustomData isSpecial: NO
             subdata = [CustomData11, CustomData12...] 
- CustomData isSpecial: NO
             subdata = [CustomData21, CustomData22...] 
- CustomData isSpecial: YES
             subdata = [CustomData31, CustomData32...] 
- CustomData isSpecial: NO
             subdata = [CustomData41, CustomData42...] 
- CustomData isSpecial: NO
             subdata = [CustomData51, CustomData52...] 
- CustomData isSpecial: NO
             subdata = [CustomData61, CustomData62...] 
- CustomData isSpecial: YES
             subdata = [CustomData71, CustomData72...] 
- CustomData isSpecial: YES
             subdata = [CustomData81, CustomData82...] 
- CustomData isSpecial: NO
             subdata = [CustomData91, CustomData92...] 
CustomModel *selectedData = tableViewDataSource[indexPath.row]
if ([selectedData isSpecial])
{
    //Go to SubVC, ie. another MainVC
    SubViewController *nextVC = ... //segue.destinationViewController looping on itself or storyboard.instatianteViewController instantiating another MainViewController
    nextVC.data = selectedData.subdata;
}
else
{
    //Go VC2
    ViewController *nextVC = ... //segue.destinationViewController or storyboard.instatianteViewController...
    nextVC.data = selectedData.subdata;
}
class ViewControllerOne: UIViewController, UITableViewDelegate {
    var isSubVC = false

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: false)

        let wireframe = WireFrame()
        let nextVC = wireframe.getNextVC(forView: self)
        self.navigationController?.pushViewController(nextVC, animated: true)
    }
}

class WireFrame {

    func getNextVC (forView view: UIViewController) -> UIViewController {
        if view.isKind(of: ViewControllerOne) {
            return ViewControllerTwo
        } else {
            // MainVC
            if indexPath.row == 2 || indexPath.row == 6 || indexPath.row == 7 {
                let subVC = self.storyboard?.instantiateViewController(withIdentifier: "ViewControllerOne") as! ViewControllerOne
                subVC.isSubVC = true
                return subVC
            } else {
                return ViewControllerTwo
            }
        }
    }
}