首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向页面控制器添加按钮

如何向页面控制器添加按钮
EN

Stack Overflow用户
提问于 2011-03-21 16:40:34
回答 2查看 1.9K关注 0票数 0

我想知道如何添加按钮(左和右)来更改页面控制视图。我正在编写这个教程1:http://www.edumobile.org/iphone/iphone-programming-tutorials/pagecontrol-example-in-iphone/。除了这个示例代码中的切换功能之外,我如何添加两个简单的按钮(左和右)来翻页?

我是一个程序员初学者,所以任何类型的答案都是非常有用的!:)

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-21 16:58:50

您可以向视图中添加两个按钮,当单击该按钮时,可以根据单击的按钮调用一个方法来翻页。

代码语言:javascript
复制
UIButton *leftButton = [[UIButton alloc] init];
leftbutton.frame = leftButtonFrame;
[leftbutton setTitle:@"Left" forState:UIControlStateNormal];
[leftbutton addTarget:self action:@selector(leftbuttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[yourView addSubview:leftbutton];


UIButton *rightButton = [[UIButton alloc] init];
rightButton.frame = rightButtonFrame;
[rightButton setTitle:@"Right" forState:UIControlStateNormal];
[rightButton addTarget:self action:@selector(rightButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[yourView addSubview:rightButton];

- (void)leftButtonclicked:(id)sender
{
//Code to turn page left
}

- (void)rightButtonclicked:(id)sender
{
//Code to turn page right
}
票数 1
EN

Stack Overflow用户

发布于 2017-11-20 10:45:02

我会迅速回答这个问题,但你应该会翻译。

这个过程是找到PageControl视图,添加两个按钮,并在适当的时候隐藏按钮(即第一页没有上一个按钮)。

我把按钮放在PageControl的左边和右边。默认行为是触摸那里会后退和前进一页。因此,我将按钮设置为enabled=false,以便触摸执行此默认行为。

首先,我们需要一个枚举来帮助定位按钮。使用视图中其他地方不会使用的值。

代码语言:javascript
复制
enum enumBtnTag: Int {
    case tagPrev = 9991
    case tagNext = 9992

}

var pageNbr = 0  //Needed to keep track of page being displayed

现在我们将在ViewDidLoad中添加按钮。首先我找到PageControl,然后查找按钮,这样就不会创建两次。(ViewDidload可能会被多次调用)

代码语言:javascript
复制
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    for view in self.view.subviews {
        if view is UIPageControl {
            let curr:UIPageControl = view as! UIPageControl
            curr.backgroundColor = UIColor.clear
            curr.currentPageIndicatorTintColor = UIColor.red   //Page Dot is red
            curr.pageIndicatorTintColor = UIColor.black   //Other dots are black

            let pcSz = view.frame
            let btnSz = CGSize(width: 35, height: 50)  //Use your button size


            if let _ = self.view.viewWithTag(enumBtnTag.tagNext.rawValue) as? UIButton {}
            else {   //Next Button not found
                let Nbtn = UIButton(frame: CGRect(x: pcSz.width - btnSz.width, y: -15, width: btnSz.width, height: btnSz.height))
                Nbtn.setTitle(">>", for: UIControlState.normal)
                Nbtn.backgroundColor = UIColor.clear
                Nbtn.setTitleColor(UIColor.brown, for: UIControlState.normal)
                Nbtn.titleLabel?.font = UIFont(name: enumFontNames.MarkerFelt_Wide.rawValue, size: 60.0)
                Nbtn.isEnabled = false  //Allows touch to fall through to PageControl
                Nbtn.tag = enumBtnTag.tagNext.rawValue

                view.addSubview(Nbtn)

            }


            if let _ = self.view.viewWithTag(enumBtnTag.tagPrev.rawValue) as? UIButton {}
            else {   //Prev Button not found
                let Pbtn = UIButton(frame: CGRect(x: 0, y: -15, width: btnSz.width, height: btnSz.height))
                Pbtn.setTitle("<<", for: UIControlState.normal)
                Pbtn.backgroundColor = UIColor.clear
                Pbtn.setTitleColor(UIColor.brown, for: UIControlState.normal)
                Pbtn.titleLabel?.font = UIFont(name: enumFontNames.MarkerFelt_Wide.rawValue, size: 60.0)
                Pbtn.isEnabled = false
                Pbtn.isHidden = true
                Pbtn.tag = enumBtnTag.tagPrev.rawValue

                view.addSubview(Pbtn)
            }
        }
    }

}

然后,我捕获将要显示的页面。页面可能不会显示(用户拖动的距离不够远),但这会在以后处理。

代码语言:javascript
复制
func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {

    if let identifier = pendingViewControllers[0].restorationIdentifier {
        if let index = pages.index(of: identifier) {
            pageNbr = index
        }
    }

}

现在我们在didFinishAnimating中修改按钮;

代码语言:javascript
复制
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {

    if finished && completed {

        if let button = self.view.viewWithTag(enumBtnTag.tagPrev.rawValue) as? UIButton {
            if pageNbr > 0 {
                button.isHidden = false
            } else {
                button.isHidden = true
            }
        }


        if let button = self.view.viewWithTag(enumBtnTag.tagNext.rawValue) as? UIButton {
            if pageNbr < pages.count - 1 {
               button.isHidden = true
            } else {
               button.isHidden = false
            }
        }

    }

}

奖励代码:我在下一个按钮所在的最后一页添加了一个保存功能。您需要设置按钮已启用(以便它注册触摸)并设置目标(您想要执行的任何函数);我的是"nextSegue“。当然,当不在最后一页时,删除目标;

代码语言:javascript
复制
if pageNbr < pages.count - 1 {
    //Not on last page. Use next button
    button.setTitle(">>", for: UIControlState.normal)
    button.removeTarget(self, action:  #selector(nextSegue), for: UIControlEvents.touchUpInside)
    button.isEnabled = false
} else {
    //On last page. Use save button
    button.setTitle("S", for: UIControlState.normal)
    button.addTarget(self, action: #selector(nextSegue), for: UIControlEvents.touchUpInside)
    button.isEnabled = true
}

希望这对某些人有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5375386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档