小编use*_*902的帖子

创建都继承自 BaseViewController 的 TableViewController 和 UIViewController

我有五个视图控制器,它们都继承自一个基本视图控制器。我的 baseVC 包含共享功能,例如启动或停止活动标识符或检查互联网活动。VC 如下所示

class BaseVC: UIViewController { }
class NewsFeedVC: BaseViewController { }
class MakePostVC: BaseViewController { }
class NotificationVC: BaseViewController { }
class MoreVC: BaseViewController { }
class CollectionVC: BaseViewController { }
Run Code Online (Sandbox Code Playgroud)

我的 NewsFeedVC 和 NotificaitionVC(来自故事板)是由普通的 UIViewController 构建的,tableView 拖进来了。所以这一切都有效。但是,我正在考虑将故事板中的这两个 VC 更改为 UITableViewController 而不是将 tableView 拖到 viewController 中。这样做的原因是因为如果 tableView 是在 UIViewcontroller 中构造的,则在 pull to refresh 周围存在一些错误导致 tableView 跳转。

但是,如果 NewsFeedVC 和 NotificationVC 像下面这样从 UItableViewController 继承,我将无法再使用 BaseVC 中的功能。我该如何构建它以实现我的愿望?

class NewsFeedVC: UITableViewController { }
class MakePostVC: UITableViewController { }
Run Code Online (Sandbox Code Playgroud)

uitableview uiviewcontroller ios swift

3
推荐指数
1
解决办法
1425
查看次数

向Firebase和AngularFire2注册用户

在我的app.component.ts中,我正在使用此功能通过angularFire2将用户注册到Firebase。但是我在类型“ void”上遇到“属性'subscribe'不存在”的错误。

register() {
    this.userService.registerUser(this.model)
        .subscribe(
            data => {
                console.log('Registration successful')
            },
            error => {
                this.loading = false;
            });
}
Run Code Online (Sandbox Code Playgroud)

在我的userService.ts中,我有以下调用从Firebase获取数据

registerUser(user: User) {
    this.angularFire.auth.createUser({
    email: user.email,
    password: user.password
    }).then(
    (success) => {
        console.log(success);
    }).catch(
    (err) => {
        console.log(err);
    })
}
Run Code Online (Sandbox Code Playgroud)

我知道为什么会出现错误。因为我在userService中的registerUse函数不会返回可观察到的结果。当我刚接触Typescript时,如何将其更改为可观察的状态,以便在数据返回时可以在app.component.ts中的console.log('Success')进行操作?

observable firebase typescript angularfire2 angular

3
推荐指数
1
解决办法
3347
查看次数

使用默认图标以编程方式创建IOS导航项

我想以编程方式使用默认的XCode刷新图标创建导航项"刷新".我知道如何使用以下代码创建一个单词"Refresh".但是,我希望图标不含"刷新"这个词,感谢您提前帮助

    let refreshButton = UIBarButtonItem(title: "Refresh", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(FollowVC.refresh))
Run Code Online (Sandbox Code Playgroud)

刷新

uinavigationbar ios swift

2
推荐指数
1
解决办法
6532
查看次数

更正语法以在完成处理程序之前创建进度块

我正在创建一个单独的类来处理我的Amazone S3上传请求。但是,我不太确定允许我在完成处理程序之前创建进度块的语法(如下所示IBAction)。基本上,我希望在VC中实现以下目标:

@IBAction startUpload() {
    let uploadPost = PostUpload(imageNSData: someNSData)() 

    uploadPost.uploadBegin { 
        // Some block here to grab the "progress_in_percentage" variable so I can use it on progress bar 
        {
            // Some completion block when the request is completed and check if any error was returned
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是PostUpload类的结构

class PostUpload {

    var imageNSData: NSData!

    init(imageNSData: NSData) {
        self.imageNSData = imageNSData
    }

    func uploadBegin(completion:(success: Bool, error: NSError?) -> Void) {

        // 1. Create upload request
        let uploadRequest …
Run Code Online (Sandbox Code Playgroud)

ios swift

2
推荐指数
1
解决办法
739
查看次数

响应式导航栏,带有角度2和自举4

我正在尝试使用导航栏构建一个带有一些选项的Web应用程序.但是,当在移动设备上查看网站时,导航栏会缩小并显示一个图标供用户按下以显示选项.正是从这个网站响应网站显示的行为

我使用带有引导程序4的角度2.

我已尝试过bootstrap 4个例子,但它们似乎没有用angular 2工作得太好(Dropdown不起作用).这是当我发现角度团队实际上已经在他们自己的框架上工作以与引导程序集成时称为ng-bootstrap.但是,那里没有关于响应式导航栏的信息.

有没有一种快速简便的方法来构建这样的导航栏,而无需通过检查屏幕大小和改变周围的事情来手动完成?

responsive-design twitter-bootstrap angular

2
推荐指数
1
解决办法
6543
查看次数

从firebase返回的对象访问$ key

我有一个从firebase下载的对象,它是Bug(自定义类型).但是,当我尝试使用以下代码控制日志输出时

console.log('bug',this.bug);
Run Code Online (Sandbox Code Playgroud)

我得到以下结果.这是我所期望的,我可以继续做的事情

console.log('company', this.bug.companyName)
Run Code Online (Sandbox Code Playgroud)

但是,我也希望获得该关键值.我可以这样做吗?我试着这样做

console.log('company', this.bug.key)
console.log('company', this.bug.$key)
Run Code Online (Sandbox Code Playgroud)

而且它们都不起作用

产量

javascript firebase typescript firebase-realtime-database

1
推荐指数
1
解决办法
456
查看次数

在推送到列表后获取firebase中的路径

我将一些用户信息保存到firebase数据库中.我还想在成功保存后检索它的路径.我能够做得很好,但是,我对我收到的数据感到困惑,如下所示.

截图

因此,如果我想要获得路径,我必须运行

data.path.o
Run Code Online (Sandbox Code Playgroud)

为什么这种格式如此奇怪?我看到U,Nc,m,path,Y o.他们是假设是这样还是我错过了什么?

我使用角度2 + angularfire2与以下代码

  saveUserToFirebase(user: User): firebase.database.ThenableReference {
    const userRef = this.af.database.list('/users/' + user.company);
    return userRef.push(user)
  }

this.databaseService.saveUserToFirebase(user)
    .then( data => {
        console.log('User saved to firebase databse with path', data); 
        console.log('User saved to firebase databse with path1', data.path); 
        console.log('User saved to firebase databse with path2', data.path.o); 

        this.router.navigate(['/login']);
        this.isLoading = false;
    }, error => {
        this.isLoading = false;
        console.log("Error asjf0e", error);
    })
Run Code Online (Sandbox Code Playgroud)

javascript firebase firebase-realtime-database angularfire2 angular

1
推荐指数
1
解决办法
398
查看次数

在许多VC中使用活动指示器,而无需重复编写代码

我有两个ViewControllers(A和B)快速IOS。A和B都从Internet分别加载数据。我要activityIndicator在加载时显示。我知道我可以通过在每个VC中将其声明为如下方式来做坏事:

ViewController A

var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

func activityIndicatorBegin() {
    activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
    activityIndicator.center = self.view.center
    activityIndicator.hidesWhenStopped = true
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    view.addSubview(activityIndicator)
    activityIndicator.startAnimating()
    disableUserInteraction()

    greyView = UIView()
    greyView.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height)
    greyView.backgroundColor = UIColor.blackColor()
    greyView.alpha = 0.5
    self.view.addSubview(greyView)
}

func activityIndicatorEnd() {
    self.activityIndicator.stopAnimating()
    enableUserInteraction()
    self.greyView.removeFromSuperview()
}
Run Code Online (Sandbox Code Playgroud)

并对ViewController B执行完全相同的操作,并调用在B视图控制器中声明的activityIndi​​catorBegin和activityIndi​​catorEnd函数。但是,我想使代码更整洁。怎么做?这些天,我正在努力使代码更整洁。

谢谢,

-更新-

我会想像下面的代码将工作。但这不是因为我无法在扩展中声明变量

    var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

extension UIViewController {
    func activityIndicatorBegin() {
    activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0,0,50,50))
    activityIndicator.center = self.view.center
    activityIndicator.hidesWhenStopped = …
Run Code Online (Sandbox Code Playgroud)

ios swift

0
推荐指数
2
解决办法
2666
查看次数

如何检测以前是否显示过定位服务弹出窗口

当我第一次运行locationManager.requestWhenInUseAuthorization()时,会弹出标准的“允许AppName在您使用应用程序时访问您的位置”,并且再也不会基于标准的IOS设计(无论用户是否选择“允许,不要允许”) )。以下代码位于主视图控制器内的ViewDidLoad中

// Check location status
    if locationAuthStatus == CLAuthorizationStatus.AuthorizedWhenInUse {
        self.displayMessage.hidden = false
        self.displayMessage.text = "Waiting for GPS Signal..."

    } else {

        locationManager.requestWhenInUseAuthorization()
    }
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,如果用户退出程序,禁用定位服务,然后再返回,则不会出现弹出窗口要求用户启用已显示的位置。因此,如果以下两个条件为真,我想添加另一个自定义弹出窗口以请求权限

  1. 初始弹出窗口先前已显示
  2. 位置服务未启用。

最初,我在locationManager.requestWhenInUseAuthorization()之后获得了弹出代码。但是,这引起了问题。如果用户是第一次使用该应用,则系统会提示他默认的弹出窗口,然后我的弹出窗口便会出现。

谢谢,

xcode objective-c core-location ios swift

0
推荐指数
1
解决办法
995
查看次数