2016-01-06 13 views
1

我需要檢測Uiview是標準打開視圖還是視圖是活頁視圖。查詢uview的視圖Id將返回激活的視口視圖的Id。我發現沒有直接的方法來檢測uiview實際上是具有激活視口的工作表。如何檢測uiview是否爲激活視口

我已經在視圖激活事件中跟蹤已打開的視圖以用於其他目的。所以我考慮將視圖Id與uiview哈希碼一起存儲,以便稍後檢查它在成爲激活視圖之前確實是一個sheetview。不幸的是,我認爲與標準使用相反,uiview哈希碼不穩定。來自uiview對象的多個哈希碼請求返回不同的值。

有沒有人有辦法檢測到這種情況?我需要能夠使用uiview上的方法。因此,任何幫助找到我想與uiview對象相關的實際子窗口。當視圖被激活時,視圖仍在標題中顯示「Sheet:...」。

+0

Hashcode方法並不穩定。每次請求它時,都會創建一個新的包裝器。即使它是穩定的,哈希也不保證是唯一的(它只是用來將對象放入隔間中)。 – Maxence

+0

似乎不可能爲存儲,比較等使用不穩定的哈希碼。但我明白,我收到的對象不是每次都是相同的包裝對象。謝謝。 –

回答

-1
  TaskDialog mainDialog = new TaskDialog("Hello, viewport check!"); 
      mainDialog.MainInstruction = "Hello, viewport check!"; 
      mainDialog.MainContent = 
        "Sadly Revit API doesn't automatically know if the user is in an active viewport. " 
        + "Please click 'Yes' if your are, or 'No' if your not."; 

      mainDialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink1, 
        "Yes, I am in an active viewport on a sheet."); 
      mainDialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink2, 
          "No, I am just in an ordinary view."); 

      mainDialog.CommonButtons = TaskDialogCommonButtons.Close; 
      mainDialog.DefaultButton = TaskDialogResult.Close; 


      TaskDialogResult tResult = mainDialog.Show(); 

      bool YesOrNo = true; 

      if (TaskDialogResult.CommandLink1 == tResult) 
      { 
        YesOrNo = true; 

      } 

      else if (TaskDialogResult.CommandLink2 == tResult) 
      { 
        YesOrNo = false; 
      } 
          else{ 
      return; 
       }  
+0

搞笑。迄今爲止最好的解決方案! –

1

您可以使用ViewSheet的GetAllViewports方法來確定給定工作表上的所有視口。利用這一點,您可以將雙向字典查找系統映射到任何工作表,將其映射到它託管的所有視口,反之亦然。這應該有助於解決您的任務。下面是一些例子用法:因爲當你得到一個UIView的,它是被封裝本身的對象,託管包裝

http://thebuildingcoder.typepad.com/blog/2014/04/determining-the-size-and-location-of-viewports-on-a-sheet.html

+0

對不起。我不太明白這是如何幫助我發現uiview當前正在顯示激活的視口。你能進一步解釋嗎? –

+0

你說你有權訪問激活的視口的視圖的ID。我認爲將這些內容加入這種查找系統會很有用。我想我不太明白你的問題。 –

+1

假設我打開了平面圖視圖,然後我還打開了一張帶有同樣平面圖的工作表。然後,我在打開的圖紙視圖中激活平面圖視口。我現在有兩個UIViews報告他們是相同的平面圖。我無法分辨哪個是平面圖視圖,哪個是同一平面圖的激活視口。我需要知道的是,UIVIew目前是否處於顯示活動視口的狀態。哪一個是激活的視口,哪一個是標準的打開視圖? –

相關問題