2016-01-06 15 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目前是否处于显示活动视口的状态。哪一个是激活的视口,哪一个是标准的打开视图? –

相关问题