1

にフローティングボタンを作成しましたUITableViewController。期待どおりに動作します。UIViewControllerここで、追加した場所でもボタンを使用したいと思いましたUITableView

フローティング ボタンを作成するコードは同じですが、動作が異なります。

ボタンのUITableViewController位置にとどまります。ボタンでUIViewController上に移動し(下にスクロールすると)、下に移動します(上にスクロールすると)

ボタンを の位置にとどめるにはどうすればよいですかUIViewController。のようにUITableViewController

TableViewController.h

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "SingletonClass.h"

@interface MagTableViewController : UITableViewController <UIGestureRecognizerDelegate>

@property (strong, nonatomic) IBOutlet UITableView *magTableView;
@property (strong, nonatomic) UIButton *oButton;
@property (nonatomic) float originalOrigin;

@end

TableViewController.m - フローティング ボタン、期待どおりに動作

- (void)viewDidLoad
{
    [super viewDidLoad];
    SingletonClass *sharedSingleton = [SingletonClass sharedInstance];
    self.originalOrigin = sharedSingleton.photoButtonY; // 430.0

    [self addOverlayButton];
}

#pragma mark Camera Button 
- (void)addOverlayButton {
    self.oButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.oButton.frame = CGRectMake(132.0, self.originalOrigin, 56.0, 56.0);
    [self.oButton setImage:[UIImage imageNamed:@"CameraButton56x56.png"] forState:UIControlStateNormal];
    [self.oButton addTarget:self action:@selector(toCameraView:) forControlEvents:UIControlEventTouchUpInside];

    [self.view insertSubview:self.oButton aboveSubview:self.view];
}

// to make the button float over the tableView including tableHeader
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGRect tableBounds = self.tableView.bounds; // should be _magTableView, but works with _tableView as well. But I do not know where this _tableView comes from...
    //CGRect tableBounds = self.magTableView.bounds;  

    // floating Button; 
    CGRect floatingButtonFrame = self.oButton.frame;
    floatingButtonFrame.origin.y = self.originalOrigin + tableBounds.origin.y;
    self.oButton.frame = floatingButtonFrame;

    [self.view bringSubviewToFront:self.oButton]; // float over the tableHeader
}

ViewController.h

#import <UIKit/UIKit.h>
#import "SingletonClass.h"

@interface DetailViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (strong, nonatomic) UIButton *oButton;
@property (nonatomic) float originalOrigin;

@end

ViewController.m - ジャンピング ボタン、望ましくない動作 (更新: 動作しない、ジャンプしない)

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.originalOrigin = [[SingletonClass sharedInstance] photoButtonY];  // 430.0
    [self addOverlayButton];

    [self initTableView]; // initiate the tableview and works properly    
}

#pragma mark Camera Button 
- (void)addOverlayButton {
    self.oButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.oButton.frame = CGRectMake(132.0, self.originalOrigin, 56.0, 56.0);
    [self.oButton setImage:[UIImage imageNamed:@"CameraButton56x56.png"] forState:UIControlStateNormal];
    [self.oButton addTarget:self action:@selector(toCameraView:) forControlEvents:UIControlEventTouchUpInside];

    [self.view insertSubview:self.oButton aboveSubview:self.view];
}

/** Remove this function and the button stayed where I expected it
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGRect tableBounds = self.tableView.bounds;

    // floating Button; 
    CGRect floatingButtonFrame = self.oButton.frame;
    floatingButtonFrame.origin.y = self.originalOrigin + tableBounds.origin.y;
    self.oButton.frame = floatingButtonFrame;

    [self.view bringSubviewToFront:self.oButton]; // float over the tableHeader
}
*/
4

0 に答える 0