簡體   English   中英

在UISplitviewCOntroller中將JSQMessagesViewController用作detailView時,KeyBoardToolBar只需要出現在DetailViewController中

[英]When using JSQMessagesViewController as detailView in UISplitviewCOntroller, KeyBoardToolBar needs to appear in DetailViewController only

在UISplitViewController中將JSQMessagesViewController用作detailView時,KeyBoardToolBar僅需要出現在DetailViewController中

在此處輸入圖片說明

遲來的答案...

如果要減少inputToolbar ,則需要創建JSQMessagesToolbarContentView的子類,並為工具欄的內容視圖提供自己的視圖。

在下面的示例中,創建一個JSQMessagesToolbarContentView的JSQMessagesToolbarContentView命名為JSQMessagesToolbarContentView_custom ,在下面的代碼中添加以下代碼,

#import "JSQMessagesToolbarContentView.h"

@interface JSQMessagesToolbarContentView_custom : JSQMessagesToolbarContentView
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *holderViewLeadingConstraint;
@end

JSQMessagesToolbarContentView_custom.m文件中,

#import "UIView+JSQMessages.h"
#import "JSQMessagesToolbarContentView_custom.h"

@implementation JSQMessagesToolbarContentView_custom

+ (UINib *)nib
{
      return [UINib nibWithNibName:NSStringFromClass([JSQMessagesToolbarContentView_custom class])
                      bundle:[NSBundle bundleForClass:[JSQMessagesToolbarContentView_custom class]]];
}

#pragma mark - Initialization

- (void)awakeFromNib
{
   [super awakeFromNib];
   [self setTranslatesAutoresizingMaskIntoConstraints:NO];
   self.backgroundColor = [UIColor clearColor];
}

//below method will place the contentview to desired position 
- (void)layoutSubviews
{
   [super layoutSubviews];
   self.holderViewLeadingConstraint.constant = 320;
}

#pragma mark - Setters

- (void)setBackgroundColor:(UIColor *)backgroundColor
{
   [super setBackgroundColor:backgroundColor];
   self.leftBarButtonContainerView.backgroundColor = backgroundColor;
   self.rightBarButtonContainerView.backgroundColor = backgroundColor;
}

- (void)setLeftBarButtonItem:(UIButton *)leftBarButtonItem
{
   [super setLeftBarButtonItem:leftBarButtonItem];  
}

- (void)setLeftBarButtonItemWidth:(CGFloat)leftBarButtonItemWidth
{  
   // self.leftBarButtonContainerViewWidthConstraint.constant = leftBarButtonItemWidth;
   [self setNeedsUpdateConstraints];
}

- (void)setRightBarButtonItem:(UIButton *)rightBarButtonItem
{
   [super setRightBarButtonItem:rightBarButtonItem]; 
}

- (void)setRightBarButtonItemWidth:(CGFloat)rightBarButtonItemWidth
{  
   //  self.rightBarButtonContainerViewWidthConstraint.constant = rightBarButtonItemWidth;
   [self setNeedsUpdateConstraints];
}

- (void)setRightContentPadding:(CGFloat)rightContentPadding
{
   // self.rightHorizontalSpacingConstraint.constant = rightContentPadding;
  [self setNeedsUpdateConstraints];
}

- (void)setLeftContentPadding:(CGFloat)leftContentPadding
{
   //  self.leftHorizontalSpacingConstraint.constant = leftContentPadding;
   [self setNeedsUpdateConstraints];
}

#pragma mark - UIView overrides

- (void)setNeedsDisplay
{
    [super setNeedsDisplay];
    [self.textView setNeedsDisplay];
}


//return the custom view that we are going to create next 
- (JSQMessagesToolbarContentView_custom *)loadToolbarContentView
{
   NSArray *nibViews = [[NSBundle bundleForClass:[JSQMessagesToolbarContentView_custom class]] loadNibNamed:NSStringFromClass([JSQMessagesToolbarContentView_custom class])  owner:nil  options:nil];
  return nibViews.firstObject;
}

在此之后,你需要創建新添加.xib文件命名為JSQMessagesToolbarContentView_custom.xib該文件包含我們的小內容視圖的inputToolbar更重要的是設置了讓連接為做演示的例子和ASLO設置視圖類名JSQMessagesToolbarContentView_custom 聽說我只能添加自定義視圖的圖像。

在此處輸入圖片說明

現在為領先的約束創建出口,以減小內容視圖的大小,如下所示,

在此處輸入圖片說明

並按照演示中的說明添加約束出口。 因此,如果您在不修改基類的情況下添加了一些constrian,它將給出錯誤或運行時錯誤,因此也請編輯基類

現在轉到JSQMessagesToolbarContentView.h並添加剪切屬性表單JSQMessagesToolbarContentView.m ,將其剪切過去並使其公開。

@interface JSQMessagesToolbarContentView : UIView

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *leftBarButtonContainerViewWidthConstraint;


@property (weak, nonatomic) IBOutlet NSLayoutConstraint *rightBarButtonContainerViewWidthConstraint;

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *leftHorizontalSpacingConstraint;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *rightHorizontalSpacingConstraint;

//...rest of the code 

現在在JSQMessagesInputToolbar.m文件中,為了使工具欄在splitview的一半范圍內變得透明,

- (void)awakeFromNib
{
    [super awakeFromNib];
     //...rest of the code
    [self setBackgroundImage:[UIImage new]//imageNamed:@"topbar"]
              forToolbarPosition:UIToolbarPositionAny
                      barMetrics:UIBarMetricsDefault];
    [self setShadowImage:[UIImage new] forToolbarPosition:UIBarPositionAny];
    [self setBackgroundColor:[UIColor clearColor]];

}

多數民眾贊成現在它運行該項目,並更改輸出下面看到的領先約束常量,

在此處輸入圖片說明

暫無
暫無

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

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