簡體   English   中英

如何使用子視圖卸載 uiView

[英]How to unload uiView with subview

我很難弄清楚如何卸載我的 UIView。

所以這就是我在做什么。

我有一個 UI 視圖類

@protocol JitsiViewDelegate <NSObject>

@optional
- (void)meetingEnded;
@end

@interface JitsiView : UIView

@property (nonatomic, nullable, weak) id<JitsiViewDelegate> delegate;
- (void)join:(JitsiMeetingConfig*)config;
@end

加入 (.m) 文件的位置如下所示

- (void) join:(JitsiMeetingConfig*)config
{
    RCTBridge *bridge = [[Jitsi sharedInstance] getReactBridge];
  rootView = [[RNRootView alloc] initWithBridge:bridge
                                moduleName: @"JitsiTest"
                              initialProperties: [self getInitialProperties:config]];
  rootView.backgroundColor = self.backgroundColor;
  // Add rootView as a subview which completely covers this one.
          [rootView setFrame:[self bounds]];
        rootView.autoresizingMask
            = UIViewAutoresizingFlexibleWidth
                | UIViewAutoresizingFlexibleHeight;
    [self addSubview:rootView];
}

在上面

RNRootView 是這個

而RCTBridge就是這個

我在一個 swift 項目中使用它

import UIKit
import JitsiSdk;

class ViewController: UIViewController {
    @IBOutlet weak var videoButton: UIButton?
    fileprivate var JitsiView: jitsiView?
    fileprivate var config: JitsiMeetingConfig?
    
    override func viewDidLoad() {
        super.viewDidLoad()

       //Config (removed code intentionally as it wasn't realvent) 

    }
    
    @IBAction func joinMeeting(_ sender: Any) {
                let jitsiView = JitsiView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height:self.view.bounds.size.height ))
                .delegate = self
                self.jitsiView = jitsiView;
                self.view.addSubview(jitsiView)
                jitsiView.join(config);
    }
    
    fileprivate func onMeetingEnded() {
            if(jitsiView != nil) {
                jitsiView?.removeFromSuperview()
            }
        }
}


extension ViewController: JitsiViewDelegate {
    func meetingEnded() {
        onMeetingEnded()
    }
}

在會議結束時,我想刪除JitsiView並在加載JitsiMeetView之前顯示視圖控制器中的內容,但當前代碼拋出以下錯誤

'NSInternalInconsistencyException',原因:'從主線程訪問布局引擎后,不得從后台線程對其進行修改。'

有人可以幫助我理解為什么我會收到此錯誤以及如何解決它?

從主線程訪問布局引擎后,不得從后台線程執行對布局引擎的修改。

這意味着您正在嘗試在后台線程上調用onMeetingEnded() 所有 UI 工作都必須在主/UI 線程上進行。

這是你可以做的 -

func meetingEnded() {
    DispatchQueue.main.async { [weak self] in
        self?.onMeetingEnded()
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM